2016-02-01 202 views
1

我無法讓我的自定義授權屬性返回除401控制器上未經授權的方法。自定義AuthorizeAttribute未授權

我設置一個非常基本的自定義授權屬性:

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

您的授權屬性似乎存在三重冗餘。您已將三個授權篩選器添加到單個控制器操作。兩個位置:

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(香草)首次應用,達到了其自身的AuthorizeCore()返回false併發送你的背景到401維爾。

嘗試刪除全局過濾器註冊,然後查看控制器操作是否按預期行爲。

public static void RegisterGlobalFilters(GlobalFilterCollection filters) { 
      filters.Add(new HandleErrorAttribute()); 
     }