使用AttributeAuthorization进行全局过滤

时间:2016-06-26 21:23:54

标签: asp.net-mvc

我已经注册了一个全局过滤器来授权需要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");
                }

            }
        }

1 个答案:

答案 0 :(得分:2)

  

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

你可以,但只是移动逻辑会更简单,因此基础OnAuthorize方法(包含logic to scan for [AllowAnonymous])是未经修改的。

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还包含一些您应该留下的additional logic to help it deal with output caching