0

如何处理由 Breeze 查询导致的错误,该错误是由于 XHR 请求获得 302 重定向响应而导致的。

发生这种情况是因为我的控制器受身份验证保护,并且当会话到期时,下一个请求被重定向到登录页面 - 返回一个 HTTP 302 响应,其中包含登录页面的位置标头。

当我检查 promise 返回的错误对象时,XHR 对象没有填充 302 代码或任何我可以用来识别错误的东西 - 我认为这是因为严格来说 302 不是错误

如何使用 Breeze 捕获此问题并将浏览器重定向到登录页面

4

1 回答 1

1

在不知道实际返回给客户端的内容的情况下,这很难回答,但是您可以通过提供自己的轻量级 ajax 适配器来拦截 Breeze 的 ajax 响应处理,然后在 Breeze 看到它之前自己处理原始 Http 响应。就像是:

var origAjaxCtor = breeze.config.getAdapter("ajax");
var newAjaxCtor = function () {
    this.name = "newAjax";
    this._origAjaxCtor = new origAjaxCtor();
}
newAjaxCtor.prototype = new oldAjaxCtor(); // to delegate all other methods
newAjaxCtor.prototype.ajax = function (settings) {
   settings.success = function((data, textStatus, XHR) {
      // interpret the results yourself; augmenting them if needed
      ... { your code here } ...
      // and then call the original success code
      settings.success(data, textStatus, XHR);

   });
   // perform the actual ajax call - this will call your custom success method from    above.
   this._origAjaxCtor.ajax(settings);
}
// register the new adapter
breeze.config.registerAdapter("ajax", newAjaxCtor);
// make this adapter the default
breeze.config.initializeAdapterInstance("ajax", "newAjax", true);
于 2013-06-17T21:24:45.370 回答