/*十有三博客*/
  • 首页
  • 关于本站
  • 网站地图
  • RSS订阅

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

2014-07-10 十有三 0 浏览:2万+ .NET技术 ASP.NET MVC

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

但是今天却遇到一个AllowAnonymous属性失效的问题,导致声明了该属性控制器的操作方法无法匿名访问,需要登陆后才可访问。后经过排查,是由于配置文件属性设置的问题。

一般是这样声明这个属性的:

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

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

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

但是如果有发现声明了该属性后,却无法访问属性设置下的Action操作方法,反而跳转到身份验证的登陆页面。这个时候可以按下面步骤排除问题:

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

    将配置文件的此段配置删除后,就可以正常的匿名访问有声明允许匿名访问属性的Action操作方法了。


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


作者:十有三

出处:https://shiyousan.com/post/635406153786208233

版权声明:本文采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。欢迎转载本文,转载请声明出处或保留此段声明。


  • 上一篇: (译)在 ASP.NET中使用 XML-RPC 进行ping
  • 下一篇: C#如何根据输入的行数打印出由*星号组成的三角形

相关文章
  • IIS上设置ARR导致所有网站无法正常打开
  • 如何禁用Visual Studio实时调试?
  • ASP.NET MVC使用HTML模板进行静态化操作
  • ASP.NET MVC实现IExceptionFilter接口编写自定义异常处理过滤器
  • 解决Visual Studio 起始页中"最近的项目"没有记录最近使用的项目和解决方案
  • ASP.NET MVC Compare ErrorMessage 无效导致无法显示自定义错误信息

文章分类

.NET技术 123 数据库 24 Web前端 21 网站建设运维 37 操作系统与应用 66 程序猿日常 11 开发工具 12 其他随笔 13

文章标签

ASP.NET ASP.NET MVC C# CSS HTML IIS Javascript Linux MongoDB MySql SQL SQL Server Visual Studio Windows系统 版本控制系统 插件工具 服务器 搞笑娱乐 好文分享 软件应用 生活知识 手机问题 随笔 网络知识 网站设计优化 网站维护 养生保健 异常处理 硬件设备 游戏攻略

热门文章

  • IIS8如何安装和使用URL重写工具-URL Rewrite
  • 林蛋大与楚中天,朱肚皮与朱月坡
  • 解决IE11安装升级失败和在安装前需要更新的问题
  • Windows Server 2012无法安装 .NET3.5-安装角色或功能失败,找不到源文件
  • VS重构重命名的快捷键

推荐文章

  • 设置Windows10的微软拼音输入法默认为英文
  • Win10中如何设置Hyper-V的网络让虚拟机也能上外网
  • System.Data.SqlClient.SqlError: 尚未备份数据库的日志尾部
  • C# String.Substring(Int32, Int32)超出长度是否会出错
  • 网站用户体验优化之数值显示

友情链接

  • Passingwind的博客
  • 码友网

知识共享许可协议 CC BY-SA 4.0本站作品采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。
闽ICP备15003702号
闽公网安备 35020302035102号