Мое веб-приложение имеет много частичных просмотров на одной странице, которые загружаются с помощью Ajax.
Я хочу, чтобы все запросы Ajax перенаправляли пользователя на страницу входа в систему по истечении срока его сессии / файла cookie вместо загрузки страницы входа в каждый контейнер частичного просмотра. Веб-приложение использует проверку подлинности с помощью форм.
Я реализовал это решение , и оно по большей части работает нормально.
Проблема в том, что перенаправление не работает, когда пользователь обновляет сетку Kendo, которая использует привязку Ajax. Я вижу запрос перенаправления на вкладке сети, но ничего не происходит. Я попытался реализовать собственный атрибут Authorize и изменить код состояния http, но среда ASP.NET не будет перенаправлять, если код не 401. Как я могу заставить перенаправление работать?
Вот мой пользовательский атрибут Authorize, который не работает. Я не уверен, что использование пользовательского атрибута - правильное решение.
public class AuthorizeUserAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
if (filterContext.HttpContext.Request.IsAuthenticated)
{
filterContext.Result = new HttpStatusCodeResult(System.Net.HttpStatusCode.Forbidden);
}
else
{
filterContext.Result = new HttpStatusCodeResult(System.Net.HttpStatusCode.Unauthorized);
}
//filterContext.Result = new HttpStatusCodeResult(System.Net.HttpStatusCode.InternalServerError);
//filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "account", action = "logon" }));
}
else
{
base.HandleUnauthorizedRequest(filterContext);
}
}
}