Kendo 网格在会话过期时不重定向到登录页面
Kendo grid not redirecting to login page when session is expired
我的网络应用程序在使用 Ajax 加载的单个页面中有许多局部视图。
我希望所有 Ajax 请求在他的 session/cookie 过期时将用户重定向到登录页面,而不是将登录页面加载到每个局部视图容器中。 Web 应用程序正在使用表单身份验证。
我已经实现了 this solution,它在大多数情况下都运行良好。
问题是,当用户刷新使用 Ajax 绑定的 Kendo 网格时,重定向不起作用。我在网络选项卡中看到重定向请求,但没有任何反应。我已尝试实现自定义授权属性并更改 http 状态代码,但如果代码不是 401,ASP.NET 框架将不会重定向。如何使重定向工作?
我的自定义授权属性不起作用。我不确定使用自定义属性是否是正确的解决方案。
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);
}
}
}
只要 mvc 管道处于活动状态,您在上面 post 编辑的代码就可以工作。问题是那些 ajax 调用可以出于各种原因完全绕过您的管道,ajax 调用并不像表单 post 那样构成完整的 postback .也许您可以查看全局 ajax 处理程序并检查是否存在身份验证并根据需要重定向。据我所知,这些处理程序在任何 "lower down" 结果处理程序之前被调用。
$(document).ajaxError(function (event, jqxhr, settings, data) {
...
});
$(document).ajaxSuccess(function (event, jqxhr, settings, exception) {
...
});
我的网络应用程序在使用 Ajax 加载的单个页面中有许多局部视图。
我希望所有 Ajax 请求在他的 session/cookie 过期时将用户重定向到登录页面,而不是将登录页面加载到每个局部视图容器中。 Web 应用程序正在使用表单身份验证。
我已经实现了 this solution,它在大多数情况下都运行良好。
问题是,当用户刷新使用 Ajax 绑定的 Kendo 网格时,重定向不起作用。我在网络选项卡中看到重定向请求,但没有任何反应。我已尝试实现自定义授权属性并更改 http 状态代码,但如果代码不是 401,ASP.NET 框架将不会重定向。如何使重定向工作?
我的自定义授权属性不起作用。我不确定使用自定义属性是否是正确的解决方案。
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);
}
}
}
只要 mvc 管道处于活动状态,您在上面 post 编辑的代码就可以工作。问题是那些 ajax 调用可以出于各种原因完全绕过您的管道,ajax 调用并不像表单 post 那样构成完整的 postback .也许您可以查看全局 ajax 处理程序并检查是否存在身份验证并根据需要重定向。据我所知,这些处理程序在任何 "lower down" 结果处理程序之前被调用。
$(document).ajaxError(function (event, jqxhr, settings, data) {
...
});
$(document).ajaxSuccess(function (event, jqxhr, settings, exception) {
...
});