在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属性。


作者:十有三

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

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

解决ASP.NET MVC AllowAnonymous属性无效导致无法匿名访问控制器的问题的更多相关文章

  1. 【翻译】ASP.NET MVC 5属性路由(转)

    转载链接:http://www.cnblogs.com/thestartdream/p/4246533.html 原文链接:http://blogs.msdn.com/b/webdev/archive ...

  2. 解决Win10系统下 C# DateTime 出现星期几的问题 解决ASP.NET MVC 接受Request Playload参数问题

    解决Win10系统下 C# DateTime 出现星期几的问题 昨天晚上写代码的时候偶然发现 DateTime 里出现了星期几,当时一阵凌乱,去网上百度没有详细解决办法,很多人说可以用用 ToStri ...

  3. ASP.NET MVC不可或缺的部分——DI(IOC)容器及控制器重构的剖析

    ASP.NET MVC不可或缺的部分——DI(IOC)容器及控制器重构的剖析   IoC框架最本质的东西:反射或者EMIT来实例化对象.然后我们可以加上缓存,或者一些策略来控制对象的生命周期,比如是否 ...

  4. 解决ASP.NET MVC返回的JsonResult 中 日期类型数据格式问题,和返回的属性名称转为“驼峰命名法”和循环引用问题

    DateTime类型数据格式问题 问题 在使用ASP.NET MVC 在写项目的时候发现,返回给前端的JSON数据,日期类型是 Date(121454578784541) 的格式,需要前端来转换一下才 ...

  5. 解决Asp.net Mvc返回JsonResult中DateTime类型数据格式的问题

    问题背景: 在使用asp.net mvc 结合jquery esayui做一个系统,但是在使用使用this.json方法直接返回一个json对象,在列表中显示时发现datetime类型的数据在转为字符 ...

  6. Web用户的身份验证及WebApi权限验证流程的设计和实现 asp.net mvc AllowAnonymous 不起作用, asp.net mvc 匿名访问

    原文地址: https://blog.csdn.net/zjlovety/article/details/17095627 前言:Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能,一个 ...

  7. 解决asp.net mvc UpdateModel更新对象后出现null问题的方法

    在用asp.net mvc 4.0做项目的时候遇到的这种情况:情况分析:“在填写表单的时候,有一些表单没有填写,留空,然后直接post 提交表单,action中用UpdateModel 来更新mode ...

  8. 解决ASP.NET MVC(post数据)Json请求太大,无法反序列化(The JSON request was too large to be deserialized)

    这个问题出现的场景并不是很多,当你向服务端异步(ajax)post数据非常大的情况下(比如做权限管理的时候给某个角色分配权限那么就可能会出现,我所遇到的就是该角色大概200个模块每个模块平均2个功能- ...

  9. 解决asp.net mvc中*.resx资源文件访问报错

    个人笔记 问题重现 在asp.net mvc中,使用资源文件会出现一个问题,例如: 紧接着我进入视图界面,输入下面代码: <a href="javascript:void(0);&qu ...

随机推荐

  1. Web前端开发如何利用css样式来控制Html中的h1/h2/h3标签不换行

      H1/H2/H3/H4标题标签常常使用在一个网页中唯一标题.重要栏目.重要标题等情形下. H1在一个网页中最好只使用一次,如对一个网页唯一标题使用.H2.H3.H4标签则可以在一个网页中多次出现, ...

  2. js控制文本框输入数字和小数点等

    1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafte ...

  3. 销毁session

    session运行在服务器是单用户,每个session都有一个唯一的sessionid 用法:session.setAttribute("userName", "张三丰& ...

  4. PAT_1016 部分A+B

    问题描述: 正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA.例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6. 现给定A.DA.B ...

  5. zoj 3686 A Simple Tree Problem (线段树)

    Solution: 根据树的遍历道的时间给树的节点编号,记录下进入节点和退出节点的时间.这个时间区间覆盖了这个节点的所有子树,可以当做连续的区间利用线段树进行操作. /* 线段树 */ #pragma ...

  6. JS如果阻止事件冒泡和浏览器默认事件

    原地址:http://missra.com/article/web-57.html 嵌套的标签元素,如果父元素和子元素都绑定了一些事件,那么在点击最内层子元素时可能会触发父级元素的事件,下面介绍一下J ...

  7. 在Windows下不使用密码远程登陆Linux

    在登陆Linux进行管理的时候我们通常会使用用户名和密码进行登陆,这样一来是比较麻烦,二来是不安全,为了解决这个问题,我们可以使用公私钥 (public keys和private keys)进行认证. ...

  8. python学习_数据处理编程实例(二)

    在上一节python学习_数据处理编程实例(二)的基础上数据发生了变化,文件中除了学生的成绩外,新增了学生姓名和出生年月的信息,因此将要成变成:分别根据姓名输出每个学生的无重复的前三个最好成绩和出生年 ...

  9. Winform与WPF对话框(MessageBox, Dialog)之比较

    Winform:使用System.Windows.Forms命名空间中相应控件; WPF则调用Microsoft.Win32. MessageBox: // WinForm private void ...

  10. vs2013 IHttpActionResult NotFund Ok (WebAPI)

    vs2013  IHttpActionResult NotFund Ok   使用ASP.NET Web API构造基于restful风格web services,IHttpActionResult是 ...