不能处理在Ajaxredirect302,为什么?

我有一个使用Forms Authentication在asp.net mvc中编写的后端服务器。 当用户没有通过身份validation时,服务器将自动发送302redirect到login操作并返回login页面。

在客户端,我有一个项目列表。 这个列表只能被authentication的用户访问。 在页面上,我有一个使用Ajax刷新列表的button(jQuery的$ .ajax函数)。

现在,我的问题是身份validation票证超时,用户点击刷新button:

  • 我的函数发送一个ajax请求来获取刷新列表
  • 服务器检测到身份validation票据无效并发出302redirect。
  • 浏览器自动处理这个302响应,并强制我的ajax函数发送另一个ajax请求到Login动作,最后的结果是一个状态为200的HTML。我的脚本很混乱,因为这个列表也是一个状态为200的HTML。

我想要的是,当身份validation票证超时,用户点击刷新button,我应该能够检测到,并显示一条消息,要求用户login。

我尝试通过在Login操作中添加自定义标题(IS_LOGIN)来解决这个问题,并检查我的ajax响应。 但这不是一个好的解决scheme。

所以我的问题是:

  • 处理这个问题的最好方法是什么?
  • 为什么浏览器不让脚本处理302响应? 并自动强制我们的ajax创build另一个请求。 这是浏览器或jQuery库的问题? 有什么理由呢? (安全,…)

感谢您的回复。

当它是一个XHR,但不应该redirect的呼叫,但回应与401 Unauthorized并在您的callback处理。 我不知道ASP.NET,但是我做了一些与Spring Security类似的东西。

inheritance人的概念:

  • 获取已authentication的状态
  • 检查X-Requested-With: XMLHttpRequest的标题
  • 当发现和未经authentication回应401 Unauthorized
  • 未find且未经过身份validation的redirect。

底线是在某些情况下XHR调用需要被处理不同于其他HTTP请求。 如果相同的资源位于另一个位置,则只应该redirectXHR。

回答你的问题

您不能使用XHRcallback处理redirect,因为浏览器会自动处理这些redirect。 你只会回到redirect的位置。