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