2017-02-28 25 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

好的。听起来很棒。再次感谢:) –

相关问题