我无法使自定义授权属性返回除控制器方法未授权的401之外的任何内容 .
我已经设置了一个非常基本的自定义授权属性:
public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
filters.Add(new HandleErrorAttribute());
filters.Add(new AuthorizeAttribute());
filters.Add(new CustomAuthorizationAttribute()); //<---Custom
}
class 本身:
public class CustomAuthorizationAttribute : System.Web.Mvc.AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return true;
}
protected override HttpValidationStatus OnCacheAuthorization(HttpContextBase httpContext)
{
return base.OnCacheAuthorization(httpContext);
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
}
}
我用CustomAuthorizationAttribute装饰了我的控制器的动作:
[HttpPost]
[CustomAuthorization]
public ActionResult UploadFile(FormCollection fileUpload)
{...
显然,我必须遗漏一些简单的东西,因为这段代码总是导致401未经授权的响应 .
AuthorizeCore方法断点不会被命中,但偶尔会有OnAuthorization方法 .
我是MVC5的新手 . 我错过了什么?如何根据自定义条件进行此授权?
提前致谢 .
1 回答
您的授权属性似乎存在三重冗余 . 您已为单个控制器操作添加了三个授权过滤器 . 两个在这里:
......还有一个:
我猜测首先应用第一个AuthorizeAttribute(vanilla),命中它自己的AuthorizeCore(),返回false并将你的上下文发送到401-ville .
尝试删除全局过滤器注册,然后查看控制器操作是否按预期运行 .