ajax mvc表单身份验证重定向问题

时间:2017-02-08 13:26:03

标签: jquery ajax asp.net-mvc authentication form-authentication

我正在尝试在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错误处理程序之前触发。这导致在导航到登录页面之前在页面上显示错误。不知道如何处理这个问题。请指教。

1 个答案:

答案 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.
    }
});