C# WebAPI中授权失败时如何返回自定义消息

C# WebAPI中授权失败时如何返回自定义消息,c#,asp.net-web-api,owin,authorize-attribute,C#,Asp.net Web Api,Owin,Authorize Attribute,在我的WebAPI项目中,我有许多API都用[Authorize]属性修饰 [Authorize] public HttpResponseMessage GetCustomers() { //my api } 如果用户没有正确的令牌,将向用户返回拒绝访问异常 但我需要的是,在任何这种情况下,我都需要返回自定义响应消息 { "StatusCode" : 403, "message": "You donot have sufficient permission" } 如果授权失败,

在我的WebAPI项目中,我有许多API都用
[Authorize]
属性修饰

[Authorize]
public HttpResponseMessage GetCustomers()
{
   //my api
}
如果用户没有正确的令牌,将向用户返回拒绝访问异常

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

{
  "StatusCode" : 403,
  "message": "You donot have sufficient permission"
}
如果授权失败,如何返回此自定义消息

请注意:

  • 我正在使用基于Owin令牌的身份验证
  • 我没有将访问令牌存储在我的数据库或任何其他地方

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


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

看看这里的答案:谢谢,伙计:)它满足了我的要求。正如您提到的,有很多种方法,如果您能再添加一种方法,我将不胜感激。其他方法可以是在客户端处理异常,也可以是在全局应用程序级别处理异常,但根据我的知识,这是我上面提到的最佳方法。听起来很棒。再次感谢:)如何在.NETCore中做到这一点??一直在寻找,但一切似乎都朝着气候和政策的方向发展。只需要像这样简单的东西?感谢这不再适用于MVC 5,因为HandleUnauthorizedRequest接受System.Web.MVC.AuthorizationContext类型的参数
    [CustomAuthorization]       
    public IHttpActionResult Get()
    {
        return Ok();
    }