我正在尝试在MVC表单身份验证中处理失败的ajax请求。我在Global.asax中添加了以下代码。
protected void Application_BeginRequest()
{
HttpRequestBase request = new HttpRequestWrapper(Context.Request);
if (request.IsAjaxRequest())
{
Context.Response.SuppressFormsAuthenticationRedirect = true;
}
}
在主要版面上,我添加了以下代码
$(document).ajaxError(function (event, request, settings) {
if (request.status == 401) {
window.location.href = '@Url.Action( "Login", "Account" )';
}
});
问题1:在正常通话中,表单验证会重定向到登录页面以及返回URL,这将帮助用户返回到期前他访问过的同一页面。 http://localhost:53733/Account/Login?ReturnUrl=%2fUser%2fUserList
自从我使用jQuery重定向以来,在ajax调用期间,http://localhost:53733/Account/Login。如何确保即使在ajax调用中它也会重定向到登录页面以及返回URL
问题2:此外,本地ajax函数错误处理程序在全局ajax错误处理程序之前触发。这导致在导航到登录页面之前在页面上显示错误。不知道如何处理这个问题。请指教。
答案 0 :(得分:0)
您可以将当前网址作为returnUrl
发送var u = '@Url.Action( "Login", "Account" )?ReturnUrl='+window.location.href;
window.location.href = u;
请记住,成功登录后,您的Login操作方法将重定向到returnUrl值,这将是一个全新的GET请求。因此,用户将页面视为新页面加载(在重定向之前,它将丢失您在页面中所做的任何更改)
对于第二个问题,在您的本地ajax函数中,如果request.status == 401
像
这样的东西$.ajax({
url: "someUrl",
type: "post"
}).done(function(f) {
console.log('done');
}).fail(function(a, b, c) {
if (a.status !== 401) {
// Handle locally as needed.
}
});