I know this is duplicate but I could not get reliable solution(for 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
}
}
- 问题:**如果会话过期,它不知何故不调用ajax成功行(它确实返回正确的json)。即使这样,如果我在页面中有很多ajax请求(应该全局处理),这也不是一个正确的方法。
然而,我看到这篇文章,这是一个很好的解决方案,但它的mvc使用AuthorizeAttribute
:handling-session-timeout-in-ajax-calls
So, Is there I can use same concept used in mvc using AuthorizeAttribute in asp.net web api? If not, how I can troubleshoot those issue which I'm facing (any of above two mentioned)?
6条答案
按热度按时间epfja78i1#
403状态代码将导致jQuery调用failure方法。从第二次尝试开始保留相同的代码,但是将重定向处理程序移到failure方法而不是success方法。在success方法中,像往常一样处理它。
lnxxn5zx2#
问题:
我有同样的问题,在我的剃刀MVC应用程序抛出异常,而ajax调用时,会话超时。
我设法解决这个问题的方法是通过使用一个简单的轻量级操作方法(RAZOR MVC)来监视每个ajax请求,无论请求是否经过身份验证,该方法都会返回一个bool变量。
布局/母版页/脚本文件:
})
然后在家庭控制器/服务器端,您需要一个方法来验证请求并返回布尔变量。
这将验证每个ajax请求,如果任何ajax请求的会话过期,它将用一条消息提醒用户,并将用户重定向到登录页面。
我也建议不要使用标准的警报到警报。用户一些工具提示类格式化div警报。标准的JS警报可能会迫使用户在重定向前单击确定。
希望对你有帮助。:)
谢谢,利亚兹
e5nqia273#
最后,我终于跟了上去。
处理客户端
bis0qfac4#
您可以设置会话超时过期警告,例如....
5gfr0r5j5#
4xx是HTTP错误状态代码,会导致jquery执行onFailure回调。
另外,当你想要处理有效负载时,要小心使用3xx进行重定向。根据我的经验,InternetExplorer只会在返回3xx状态代码时进行重定向(不看有效负载)。
我会说,抛出一个403并处理这种情况。对客户端来说,403意味着资源访问被禁止。可能有多种原因,我想这是可以的。
rnmwe5a26#
对于那些使用ScriptManager的用户,您可以轻松地检查 AJAX 请求,然后使用以下代码进行重定向:
然后检查请求类型并相应地重定向(使用此处的路由):
“默认”路由是路由集合中定义的路由:
如果您愿意,您可以使用以下命令,而不是使用ScriptManager进行 AJAX 请求检查: