【问题标题】:MVC FormsAuthentication time out - AJAX considerationsMVC FormsAuthentication 超时 - AJAX 注意事项
【发布时间】:2012-01-12 06:19:54
【问题描述】:

希望您能提供帮助。在我的 ASP.net MVC3 应用程序中,我的所有控制器都来自我创建的自定义控制器。

FormsAuthentication 超时后,如果用户尝试访问任何页面(标准功能),我的应用会正确地将用户重定向到登录页面。

但是,对于 Ajax.ActionLink 和 Ajax.BeginForm 调用,它们什么都不返回,如果浏览器打开超过 20 分钟,然后他们尝试访问 Ajax 链接,这会使用户感到困惑。

我是否可以将任何代码放入我的基本控制器中,以便在它检测到入站 Ajax 调用并且我们超时时,它会按预期将用户重定向到我的登录页面?

我不介意它之后不返回原始页面 - 很高兴它只是转到主页索引页面。

提前感谢您提供的任何帮助。

西蒙。

【问题讨论】:

    标签: asp.net-mvc ajax timeout forms-authentication


    【解决方案1】:

    您可以查看following blog post,它说明了防止 FormsAuthentication 模块在出现 AJAX 请求时重定向到登录页面的好方法,并且只需向客户端发送 401 状态代码,以便它可以采取行动相应地。

    【讨论】:

    • 嗨@Darin,感谢您的回复。实际上,这是我想要的相反行为 - 我希望我的应用程序始终返回登录页面,无论它是 Ajax 还是常规调用。我不想在我进行的每个 AJAX 调用中都响应 401 - 我希望它是内置到我的基本控制器中的标准行为。而且因为 Ajax 表单通常在 div 中呈现页面的一部分,所以我需要我的登录表单是一个完整的页面重定向 - 不显示在 div 部分中。谢谢,西蒙。
    • @Simon,问题是当您使用 AJAX 并且如果您的服务器不返回 401 状态代码,您将无法知道您是否被重定向到登录页面(因为会话已过期)或者,如果您获得了正确的页面。在这两种情况下,您都会获得 200 个状态代码和 HTML。所以你不能采取相应的行动。如果您将服务器配置为在会话过期的情况下返回 401 状态代码,您将能够在 AJAX 401 错误回调中使用window.location.href,因为您将知道会话已过期,只需将浏览器重定向到登录页面。跨度>
    • 嗨达林,感谢您的建议。那么我的下一个问题是,如何默认设置此行为?在我的应用程序中,我确实有数百个 AJAX 调用。我真的不想手动在每个人中专门处理这种情况。有没有办法设置这个默认行为,也许使用 JQuery?
    • @Simon,您可以在您的页面上订阅全局.ajaxError() 处理程序,这样如果在您的任何 ajax 调用期间触发错误,您将能够在一个集中的位置处理它。因此,您将检查 HTTP 状态代码,如果是 401,您将重定向到登录页面。
    • 谢谢@Darin。非常感激。我只有 13 名代表,所以我还不能投票给你的答案。可以的话+1!!!
    猜你喜欢
    • 2010-12-12
    • 1970-01-01
    • 2014-03-18
    • 2011-12-18
    • 1970-01-01
    • 2017-09-14
    • 2011-01-25
    相关资源
    最近更新 更多