2017-02-28 76 views
5

在我的WebAPI項目中,我有一些裝飾有[Authorize]屬性的apis。如果在WebAPI中授權失敗,如何返回自定義消息

[Authorize] 
public HttpResponseMessage GetCustomers() 
{ 
    //my api 
} 

如果用戶沒有正確的令牌,則拒絕訪問異常返回給用戶。

但我需要的是,在任何這種情況下,我需要返回自定義響應消息。

{ 
    "StatusCode" : 403, 
    "message": "You donot have sufficient permission" 
} 

如何在授權失敗的情況下返回此自定義消息。

請注意:

  • 我使用Owin - 基於令牌的認證。
  • 我是不是將訪問令牌存儲在我的數據庫或其他任何地方。
+0

已閱讀這裏的答案:http://stackoverflow.com/questions/20149750/owin-unauthorised-webapi-call-returning-login-page-rather-than-401 –

+0

http://stackoverflow.com/questions/2578756/how-to-make-authorize-attribute-return-custom-403-error-page-instead-of-redirect –

回答

9

有不同的方法可以做到這一點,但最好的方法之一可能是定製授權attributes.You只需要繼承AuthorizeAttribute並重寫它HandleUnauthorizedRequest()方法。

public class CustomAuthorization : AuthorizeAttribute 
{ 
    protected override void HandleUnauthorizedRequest(HttpActionContext actionContext) 
    { 
     actionContext.Response = new HttpResponseMessage 
     { 
      StatusCode = HttpStatusCode.Forbidden, 
      Content = new StringContent("You are unauthorized to access this resource") 
     }; 
    } 
} 

,並使用該像

[CustomAuthorization]  
    public IHttpActionResult Get() 
    { 
     return Ok(); 
    } 

否則,你還可以趕上在客戶端的狀態代碼,並顯示您所選擇的自定義消息(CustomAuthorization應就地的Authorize使用)。

+0

感謝隊友:)它解決了我的需求。正如你所提到的,有很多方法,如果你可以添加更多的方法,我將不勝感激 –

+0

其他方式可以處理客戶端的異常或處理全局應用程序級別的異常,但是根據我的知識,我上面提到的最佳方式 –

+1

好的。聽起來很棒。再次感謝:) –

相關問題