/*十有三博客*/
  • 首页
  • 关于本站
  • 网站地图
  • 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#如何根据输入的行数打印出由*星号组成的三角形

相关文章
  • 发布BlogEngine.NET 3.3.5.0 出现 HTTP 错误 404.2 和404.0
  • ASP.NET MVC Compare ErrorMessage 无效导致无法显示自定义错误信息
  • ASP.NET MVC AJAX调用没有反应和返回结果
  • 解决VS2013编码遇到无法嵌入互操作类型“ChinaPay_NET.NetPayClientClass”请改用适用的接口的问题
  • Visual Studio Community 2013英文版安装中文语言包步骤
  • 解决IIS ASP.NET 网站发布后出现错误 Unable to connect to any of the specified MySQL hosts

文章分类

.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-安装角色或功能失败,找不到源文件
  • Win10中如何设置Hyper-V的网络让虚拟机也能上外网

推荐文章

  • .NET 4.5 使用async和await关键字调用异步方法
  • WIN10 添加美式键盘并设置为默认输入法
  • Discuz!NT 图像因存在错误而无法显示
  • 随笔:Visual Studio Community 2015安装程序的ISO光盘镜像下载地址
  • MIME 类型大全(收集常用的MIME Type)

友情链接

  • 码友网

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