我知道这是重复的,但我无法获得可靠的解决方案(对于 asp.net web)。
如果会话过期,我只想重定向到登录页面。我试过以下:
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),我只希望会话超时。
2.会话是否过期发送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
}
}
问题:如果会话过期(它确实返回正确的 json),它会以某种方式不调用 ajax 成功行。如果页面中有很多 ajax 请求(应该全局处理),即使这也不是正确的方法。
但是,我看到这篇文章确实是一个很好的解决方案,但它适用于 mvc 使用AuthorizeAttribute
:handling-session-timeout-in-ajax-calls
那么,我可以在 asp.net web api 中使用 AuthorizeAttribute 使用 mvc 中使用的相同概念吗?如果没有,我该如何解决我面临的那些问题(上述两个中的任何一个)?