ASP.net MVC全球授权过滤器强制登录上使用AllowAnonymous行动(ASP.net

2019-06-25 11:45发布

设置(使用MVC 4)

public class MyAuthorizeAttribute : AuthorizeAttribute {

    protected override bool AuthorizeCore(HttpContextBase httpContext) {

        var isAuthorised = base.AuthorizeCore(httpContext);

        if(isAuthorised) {
            // retrieve authentication ticket from cookie and
            // create custome principal and attach to 
            // httpContext.User
        }

        return isAuthorised;
    }
}

Gloabl.asax.cs:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
    filters.Add(new MyAuthorizeAttribute());
}

HomeController.cs:

using System.Web.Mvc;

public class HomeController : Controller
{
    [AllowAnonymous]
    public ActionResult Index()
    {
        return View();
    }
}

问题

到首页调用强制登录页面加载。

当HomeController.Index()动作装饰有[使用AllowAnonymous],为什么ASP重定向我到登录看法?

我使用的这个文章引用

Answer 1:

按我对原来的问题发表评论。 问题是索引视图中调用该返回部分视图其它控制器的操作。 通过一切顺利,并剥离出老[授权]属性只是一个案例。



Answer 2:

虽然原来的海报已经找到了他的情况的原因,我想和大家分享我的决心,因为我碰到这个问题来了,当面临着相同的症状。

在我的web.config文件中我有,服从web表单的逻辑:

<authorization>
  <deny users="?" />
</authorization>

你一定没有这个,因为它会阻止请求执行任何动作,而在第一次登录时,除登录操作到重定向发生。 我才发现这个,当我试图添加第二个公益行动。



Answer 3:

我有类似的问题,到底我用错了AllowAnonymousAttribute类。 有两种AllowAnonymousAttribute类:

  • 一个从System.Web.Http 命名空间
  • 从另外一个System.Web.Mvc 命名空间

你的情况,你必须使用,当然从一个System.Web.Mvc :)

我花更多的则一小时,以搞清楚在我的计划



Answer 4:

虽然这不是一个答案,但..

与内置尝试Authorize代码,并确保AllowAnonymous工作正常。 我在您的自定义见授权你想评论

从cookie中检索身份验证票证和创建custome本金和附加到HttpContext.User中

我建议你做的过程中非常早在Application_AuthenticateRequestGlobal.asax.cs按照本规定的主题 。



文章来源: ASP.net MVC global Authorize filter forcing login on an AllowAnonymous action