У меня есть часть моего сайта с легким API-интерфейсом REST xml / json. Большая часть моего сайта находится за аутентификацией форм, но только некоторые из моих действий API требуют аутентификации.
У меня есть собственный AuthorizeAttribute для моего API, который я использую для проверки на наличие определенных разрешений, и в случае сбоя это приводит к 401. Все хорошо, за исключением того, что я использую формы auth, Asp.net удобно конвертирует это в 302 перенаправить на мою страницу входа.
Я видел несколько предыдущих вопросов , которые кажутся немного хакерскими, чтобы либо вместо этого возвращать 403, либо использовать некоторую логику в global.asax protected void Application_EndRequest ()
это, по сути, преобразует 302 в 401, где оно соответствует любым критериям.
То, что я сейчас делаю, похоже на один из вопросов, но вместо проверки Application_EndRequest () для 302 я возвращаю свой атрибут авторизации 666 , который указывает мне, что мне нужно установить это на 401.
Вот мой код:
protected void Application_EndRequest()
{
if (Context.Response.StatusCode == MyAuthAttribute.AUTHORIZATION_FAILED_STATUS)
{
//check for 666 - status code of hidden 401
Context.Response.StatusCode = 401;
}
}
Даже при том, что это работает, мой вопрос, есть ли что-то в Asp.net MVC 2, что помешало бы мне сделать это? Или, вообще, есть ли лучший способ? Я бы подумал, что это подойдет многим для тех, кто работает с REST API, или просто для тех, кто выполняет запросы AJAX в своих контроллерах. Последнее, что вам нужно, это сделать запрос и получить содержимое страницы входа вместо json.