首页 文章

自定义AuthorizeAttribute无法授权

提问于
浏览
1

我无法使自定义授权属性返回除控制器方法未授权的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 回答

  • 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());
            }
    

相关问题