解决ASP.NET MVC AllowAnonymous属性无效致使没法匿名访问控制器的问题

在ASP.NET MVC项目中,通常都要使用身份验证和权限控制,但总有部分网页是能够匿名访问的。使用AllowAnonymous属性就能够指定须要匿名访问的控制器,从而跳过身份验证。网络

可是今天却遇到一个AllowAnonymous属性失效的问题,致使声明了该属性控制器的操做方法没法匿名访问,须要登录后才可访问。后通过排查,是因为配置文件属性设置的问题。函数

通常是这样声明这个属性的:post

[AllowAnonymous]
public ActionResult Index() { return View(); }

声明了容许匿名访问后,用户访问该控制器下的Index操做方法时,就无需进行身份验证了网站

(PS:匿名属性启用的前提是网站启用了form身份验证)。spa

可是若是有发现声明了该属性后,却没法访问属性设置下的Action操做方法,反而跳转到身份验证的登录页面。这个时候能够按下面步骤排除问题:code

  1. 首先检查下网站的应用程序文件Global.asax是否有作过身份验证和跳转操做,要注意每一个事件里所作的特殊处理
  2. 若是Global.asax没有作任何处理的话,那么接下来检测控制器的构造函数是否有作过身份验证和跳转处理,控制器所继承的类是否是有作过相关处理。
  3. 最后就是检查Web.config这个网站配置文件了。个人问题是由于在Web.config中,设置了authorization元素,而且设置deny users="?"(拒绝全部匿名用户访问)。因为authorization的优先级大于AllowAnonymous属性,因此程序先判断deny user="?" 拒绝掉匿名用户后,就会跳过Action操做方法中的全部身份验证属性,致使网站自动跳转到身份验证的登录页面。具体配置文件代码:
    <authorization> <deny users="?" /> </authorization> 

    将配置文件的此段配置删除后,就能够正常的匿名访问有声明容许匿名访问属性的Action操做方法了。orm


另外要说的一点,若是在ASP.NET MVC中已经使用了form身份验证,那么最好不要在配置文件中设置authorization元素,身份验证控制应该使用Authorize属性和AllowAnonymous属性。xml


做者:十有三继承

出处:http://shiyousan.com/post/635406153786208233事件

欢迎转载本文,本文版权归做者全部,转载请声明出处或保留此段声明。^_^请尊重他人劳动成果,共建美好的网络环境。

相关文章
相关标签/搜索