C# 允许公众访问WebForms+;MVC站点

C# 允许公众访问WebForms+;MVC站点,c#,asp.net-mvc,webforms,asp.net-authorization,C#,Asp.net Mvc,Webforms,Asp.net Authorization,我有一个传统的ASP.Net网站,我正在将MVC集成到其中。我将webforms身份验证与web.config中的标准授权标记一起使用: <authorization> <deny users="?"/> </authorization> 以及失败的URL: http://localhost/MyWebApp/WC/42 实际上,我有一个更通用的路线来处理这个问题,但添加了这个来消除任何疑问。在任何情况下,登录都可以正常工作。我认为您可以使用Actio

我有一个传统的ASP.Net网站,我正在将MVC集成到其中。我将webforms身份验证与web.config中的标准授权标记一起使用:

<authorization>
  <deny users="?"/>
</authorization>
以及失败的URL:

http://localhost/MyWebApp/WC/42

实际上,我有一个更通用的路线来处理这个问题,但添加了这个来消除任何疑问。在任何情况下,登录都可以正常工作。

我认为您可以使用ActionFilterAttribute来修饰某些需要身份验证的方法,同时让控制器本身可以公开查看。

使用
System.Web.Mvc.AuthorizeAttribute
。您可以用它装饰控制器类本身(这将导致所有动作方法受到保护),也可以装饰动作方法本身以实现更精细的控制


如果两者都没有修饰,那么所有用户(包括匿名用户)都可以调用它们。如果只使用
[Authorize]
,则只有经过授权的用户才能调用操作方法。您还可以传入一个以逗号分隔的角色列表,以指定一个列表,用户必须至少从该列表中拥有一个角色才能调用操作方法。

您可以给出一个正在尝试的位置元素和路由的示例吗?两者之间的不匹配似乎是最有可能的原因。然后还有其他原因导致您的问题。默认情况下,行为是公开的;直到你用Authorize装饰它(或它的类),它们才受到保护。您可能需要发布web.config的各个部分,以帮助我们获得答案(身份验证元素,可能是您拥有的任何授权元素)。经过一整天的研究,我发现一些说法与此相矛盾。据我所知,面向对象的MVC站点是完全开放的,而WebForms站点则不是。看起来区别在于web.config中的授权配置。我对此感到非常困惑,因为很多人都在说一些相互矛盾的话,包括微软论坛上的MVP。我从来没有见过一个WebForms或MVC项目是完全开箱即用的。但是,没有什么能阻止某人创建自己的项目模板,所以可能会有一些模板是从那里开始的。对。我的观点是,这是一个现有的WebForms项目,已经配置了UrlAuthorization,因此,URL被锁定,因为我甚至可以通过IAuthorizationFilter ie Authorize属性或控制器OnAuthorize等方式让控制器进行授权。您能否更改路径,使MVC路由与各种webforms页面的URL不匹配?
<location path="WC">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>
routes.MapRoute(
          "WC", // Route name
          "WC/{id}",
          new { action = "GetWC", controller = "WC" } // URL with parameters
        );
http://localhost/MyWebApp/WC/42