Asp.net mvc 对全局筛选器使用AttributeAuthorization

Asp.net mvc 对全局筛选器使用AttributeAuthorization,asp.net-mvc,Asp.net Mvc,我已经注册了一个全局筛选器来授权需要cookie的请求,但是我有一个需要公开的控制器,所以我向控制器方法添加了[AllowAnonymous]属性,但是我的筛选器仍然激发并保持重定向。我不确定解决这个问题的最佳方法 我是否需要修改onauthorization方法以查找[AllowAnonymous]属性 public class CookieAuthFilter : AuthorizeAttribute { public override void

我已经注册了一个全局筛选器来授权需要cookie的请求,但是我有一个需要公开的控制器,所以我向控制器方法添加了[AllowAnonymous]属性,但是我的筛选器仍然激发并保持重定向。我不确定解决这个问题的最佳方法

我是否需要修改onauthorization方法以查找[AllowAnonymous]属性

  public class CookieAuthFilter : AuthorizeAttribute
        {
            public override void OnAuthorization(AuthorizationContext filterContext)
            {
                HttpCookie cookie = filterContext.HttpContext.Request.Cookies.Get("token");
                if (cookie == null)
                {
                    filterContext.Result = new RedirectResult("/Home/Index");
                }

            }
        }
我是否需要修改onauthorization方法以查找[AllowAnonymous]属性

  public class CookieAuthFilter : AuthorizeAttribute
        {
            public override void OnAuthorization(AuthorizationContext filterContext)
            {
                HttpCookie cookie = filterContext.HttpContext.Request.Cookies.Get("token");
                if (cookie == null)
                {
                    filterContext.Result = new RedirectResult("/Home/Index");
                }

            }
        }
可以,但只需移动逻辑,使基本的
OnAuthorize
方法(包含)不被修改,就更简单了

public class CookieAuthFilter : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        return httpContext.Request.Cookies.Get("token") != null;
    }

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        filterContext.Result = new RedirectResult("/Home/Index");
    }
}
如果用户被授权,最好使用
AuthorizeCore
返回true,并使用
HandleUnauthorizedRequest
进行重定向

OnAuthorization
还包含一些您应该保留的内容

我是否需要修改onauthorization方法以查找[AllowAnonymous]属性

  public class CookieAuthFilter : AuthorizeAttribute
        {
            public override void OnAuthorization(AuthorizationContext filterContext)
            {
                HttpCookie cookie = filterContext.HttpContext.Request.Cookies.Get("token");
                if (cookie == null)
                {
                    filterContext.Result = new RedirectResult("/Home/Index");
                }

            }
        }
可以,但只需移动逻辑,使基本的
OnAuthorize
方法(包含)不被修改,就更简单了

public class CookieAuthFilter : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        return httpContext.Request.Cookies.Get("token") != null;
    }

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        filterContext.Result = new RedirectResult("/Home/Index");
    }
}
如果用户被授权,最好使用
AuthorizeCore
返回true,并使用
HandleUnauthorizedRequest
进行重定向


OnAuthorization
还包含一些您应该保留的内容。

看看这个看看这个非常感谢。很好用,非常感谢。工作完美。