我知道这是重复的,但我无法获得可靠的解决方案(对于 asp.net web)。
我只想在 session 过期时重定向到登录页面。 我试过以下:
1。使用 jquery 状态码
$.ajax({
type: "POST",
url: "stream.asmx/SomeMethod",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
//success msg
},
error: function (request, status, error) {
if (status = 403) {
location.href = 'login.aspx';
}
}
});
问题:这也会为其他错误返回相同的状态代码 (403),我只希望 session 超时。
2。 session是否过期发送json消息
代码隐藏:
if (!object.Equals(HttpContext.Current.Session["User"], null))
{
Id = int.Parse(HttpContext.Current.Session["User"].ToString());
}
else
{
result = from row in dtscrab.AsEnumerable()
select new
{
redirectUrl = "login.aspx",
isRedirect = true
};
}
关于 $.ajax 成功:
success: function (msg) {
if (msg.d[0].isRedirect) {
window.location.href = msg.d[0].redirectUrl;
}
else {
//load containt
}
}
问题:如果 session 过期(它确实返回正确的 json),它不会以某种方式调用 ajax 成功行。如果我在页面中有很多 ajax 请求(应该在全局范围内处理),即使这不是正确的方法。
但是,我看到这篇文章确实是一个很好的解决方案,但它是针对使用 AuthorizeAttribute
的 mvc:handling-session-timeout-in-ajax-calls
那么,我是否可以使用在 asp.net web api 中使用 AuthorizeAttribute 的 mvc 中使用的相同概念?如果没有,我该如何解决我面临的问题(上述两个问题中的任何一个)?
最佳答案
403 状态代码将导致 jQuery 调用失败方法。保留第二次尝试的相同代码,但将重定向处理程序移至失败方法而不是成功方法。在 success 方法中,照常处理。
关于c# - ajax调用 session 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14100950/