我有一个 MVC 应用程序,它使用 $.ajax 从 Controller 获取数据。
不幸的是,当会话超时时,页面不会被重定向到登录页面。有人可以帮助解决这个问题吗?
谢谢你。
我有一个 MVC 应用程序,它使用 $.ajax 从 Controller 获取数据。
不幸的是,当会话超时时,页面不会被重定向到登录页面。有人可以帮助解决这个问题吗?
谢谢你。
您可以编写一个自定义的 [Authorize] 属性,该属性将返回 JSON 而不是在未经授权的访问情况下引发 401 异常,这将允许客户端脚本优雅地处理该场景:
AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.Result = new JsonResult
{
Data = new
{
// put whatever data you want which will be sent
// to the client
message = "sorry, but you were logged out"
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
else
{
base.HandleUnauthorizedRequest(filterContext);
}
}
}
在 ajax 你可以这样做:
$.get('@Url.Action("SomeAction")', function (result) {
if (result.message) {
alert(result.message);
window.location.reload();
} else {
// do whatever you were doing before with the results
}
});
如果默认情况下页面假设重定向,您可以尝试捕获特定的超时/身份验证错误,并基于此错误从客户端重定向到登录控制器
这里是取自这篇文章的一个例子
$.ajax({
url: "/yourservlet",
data: { },
complete: function(xmlHttp) {
if(xmlHttp.status==401)
{
// redirect to login page
}
}
});