【问题标题】:Handling ReturnUrls on POST after Session Expires- MVC3会话过期后处理 POST 上的 ReturnUrls-MVC3
【发布时间】:2013-07-10 13:11:22
【问题描述】:

我有一个 MVC 应用程序,它使用大量 Ajax 请求来获取和发布页面上的 div 中的表单。但是我偶然发现了经典的 Ajax 超时问题,我通过创建一个只返回一个自定义 Authorize 属性来解决这个问题401 允许我通过 Jquery 重定向到登录页面(此时一切都很好)。

 public class AjaxAuthorizeAttribute : AuthorizeAttribute
    {
        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                filterContext.HttpContext.Items["AjaxRequestPermissionDenied"] = true;

            }
            base.HandleUnauthorizedRequest(filterContext);
        }
    }

但是,当我在会话过期时执行正常的服务器端表单提交时,我会被重定向到登录表单,但是 URL 中带有表单参数,即 Login/Login.aspx?ReturnUrl=%2fTest%2fComp%2fSite%2f4。 因此,当我重新登录时,无法将表单重新插入所需的 div 中,因为这是与最初调用它的页面不同的 url。

然后的问题是,我将如何处理这种情况,以便我们始终被重定向到默认登录页面,或者最好重定向到带有登录页面链接的通用超时页面?

【问题讨论】:

    标签: asp.net asp.net-mvc session-timeout


    【解决方案1】:

    问题出在 ForsmAuthentication 模块上,如果抛出 401 异常,该模块会自动重定向到登录表单。 Phil Haack blogged 关于如何为 AJAX 请求覆盖此行为。

    因此,一旦您安装了 NuGet,您就可以简单地订阅 AJAX 调用中的 401 错误:

    $.ajax({
        url: '/admin/secret/data',
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        statusCode: {
            200: function (data) {
                alert('200: Authenticated');
                // Bind the JSON data to the UI
            },
            401: function (data) {
                alert('401: Unauthenticated');
                // Handle the 401 error here.
            }
        }
    });
    

    或通过订阅全局 .ajaxError() 处理程序并检查来自服务器的返回码,对所有 AJAX 请求进行通用处理,如果是 401,则会话已过期,您可以采取相应措施。

    【讨论】:

    • 谢谢达林。我已经对 Ajax 位进行了排序。我遇到的问题是在会话超时时具有值的经典 asp.net 表单提交(通过 Submit buitton)。我重定向到登录页面,但它带回了参数,这是表单身份验证的默认行为。我想排除返回网址?
    【解决方案2】:

    我发现这篇文章对我的特定场景很有帮助。 我希望这对其他人有帮助

    http://markfreedman.com/index.php/2012/02/28/handling-session-and-authentication-timeouts-in-asp-net-mvc/

    【讨论】:

      猜你喜欢
      • 2012-11-30
      • 2014-08-30
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      • 2011-01-20
      • 2018-04-29
      相关资源
      最近更新 更多