如果授权在WebAPI中失败,如何返回自定义消息

时间:2017-02-28 09:58:22

标签: c# asp.net-web-api owin authorize-attribute

在我的WebAPI项目中,我有一些用[Authorize]属性修饰的api。

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

如果用户没有正确的令牌,则会向用户返回拒绝访问的异常。

但我需要的是,在任何这种情况下,我都需要返回自定义响应消息。

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

如果授权失败,如何返回此自定义消息。

请注意:

  • 我正在使用Owin - 基于令牌的身份验证。
  • 将访问令牌存储在我的数据库或其他任何位置。

1 个答案:

答案 0 :(得分:22)

有不同的方法可以做到这一点,但最好的方法之一可能是自定义授权属性。您只需要继承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应该代替Authorize使用)

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

否则,您还可以在客户端捕获状态代码并显示您选择的自定义消息。