Я пытался авторизовать методы действия ajax в моем приложении MVC3. Проблема возникает, когда пользовательский сеанс истекает, и метод действия ajax предлагается выполнить. Система аутентификации asp.net отправляет 302 перенаправление вместо отправки 401, что кажется логичным для не-AJAX-запросов. Но с Ajax все быстро запутывается. Поэтому я решил придерживаться подхода, предложенного на . ASP.NET MVC принудительно перенаправляет запрос AJAX на страницу входа, когда сеанс FormsLogin больше не активен .
По сути, в конце запроса мы проверяем, является ли запрос ajax-запросом, и существует ли перенаправление (302 ответа). Если это так, то мы заменяем код ответа с 302 на 401. Соответственно в javascript мы проверяем на 401 и выполняем перенаправление оттуда. Вот основной код, который я поставил
В Global.asax.cs
protected void Application_EndRequest() {
var context = new HttpContextWrapper(Context);
// If we're an ajax request, and doing a 302, then we actually need to do a 401
if (Context.Response.StatusCode == 302 && context.Request.IsAjaxRequest()) {
Context.Response.Clear();
Context.Response.StatusCode = 401;
}
}
В глобальном обработчике ошибок JQuery (включен в главную страницу asp.net mvc: _Layout.cshtml)
$(document).ajaxError(function (event, jqXHR, ajaxSettings, thrownError) {
if (jqXHR.status == 401) {
window.location.replace(loginUrl);
}
});
Я только что быстро протестировал этот код, и он, кажется, работает нормально Есть ли потенциальная проблема с этим кодом. Я относительно начинающий программист в том, что касается asp.net mvc и jquery, поэтому я решил спросить другие мнения, прежде чем приступить к реализации кода.