Как вернуть пользовательское сообщение при сбое авторизации в WebAPI
В моем проекте WebAPI у меня есть ряд API, которые украшены атрибутом [Authorize]
.
[Authorize]
public HttpResponseMessage GetCustomers()
{
//my api
}
В случае, если у пользователя нет нужного маркера, пользователю возвращается исключение access denied.
Но что мне нужно, так это то, что в любом таком случае мне нужно вернуть пользовательское ответное сообщение as.
{
"StatusCode" : 403,
"message": "You donot have sufficient permission"
}
Как вернуть это пользовательское сообщение в случае сбоя авторизации.
Пожалуйста, обратите внимание:
- я использую OWIN в Маркер идентификация.
- я не храню маркер доступа в своей базе данных или где-либо еще.
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(); }
В противном случае вы также можете поймать код состояния на стороне клиента и отобразить пользовательское сообщение по вашему выбору.