我无法使自定义授权属性返回除控制器方法未授权的401之外的任何内容。
我已经设置了一个非常基本的自定义授权属性:
public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
filters.Add(new HandleErrorAttribute());
filters.Add(new AuthorizeAttribute());
filters.Add(new CustomAuthorizationAttribute()); //<---Custom
}
班级本身:
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的新手。我错过了什么?如何根据自定义条件进行此授权?
提前致谢。
答案 0 :(得分:1)
您的授权属性似乎存在三重冗余。您已为单个控制器操作添加了三个授权过滤器。两个在这里:
public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
filters.Add(new HandleErrorAttribute());
filters.Add(new AuthorizeAttribute());
filters.Add(new CustomAuthorizationAttribute()); //<---Custom
}
......还有一个:
[HttpPost]
[CustomAuthorization]
public ActionResult UploadFile(FormCollection fileUpload)
我猜测首先应用第一个AuthorizeAttribute(vanilla),命中它自己的AuthorizeCore(),返回false并将你的上下文发送到401-ville。
尝试删除全局过滤器注册,然后查看控制器操作是否按预期运行。
public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
filters.Add(new HandleErrorAttribute());
}