Как вернуть пользовательское сообщение при сбое авторизации в WebAPI


В моем проекте WebAPI у меня есть ряд API, которые украшены атрибутом [Authorize].

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

В случае, если у пользователя нет нужного маркера, пользователю возвращается исключение access denied.

Но что мне нужно, так это то, что в любом таком случае мне нужно вернуть пользовательское ответное сообщение as.

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

Как вернуть это пользовательское сообщение в случае сбоя авторизации.

Пожалуйста, обратите внимание:

  • я использую OWIN в Маркер идентификация.
  • я не храню маркер доступа в своей базе данных или где-либо еще.
1 12

1 ответ:

Существуют различные способы сделать это, но одним из лучших способов могут быть пользовательские атрибуты авторизации.Вам просто нужно наследовать 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();
    }

В противном случае вы также можете поймать код состояния на стороне клиента и отобразить пользовательское сообщение по вашему выбору.