处理ASP.Net Web-API 401的全局Ajax事件处理程序

时间:2016-02-05 00:43:27

标签: jquery ajax asp.net-mvc asp.net-web-api2

默认情况下,ASP.Net Web-API 2返回" 304找到"请求未通过授权时重定向。这对ajax请求没有用,所以我使用" X-Responded-JSON"响应标头检查实际的401响应,然后将用户从javascript重定向回正确的登录URL。像这样......

.done(function (data, textStatus, jqXHR) {
    var json_response = jqXHR.getResponseHeader("X-Responded-JSON");
    if (json_response) {
       var json_response_obj = JSON.parse(json_response);
       if (json_response_obj.status == 401) {
          if (confirm("You are not authorised. Would you like to login again?"))
             location.href = login_url; //my MVC login URL
             return;
          }
       }
    }
    alert('all done');
    //do other stuff

这很好用。然而,当我在页面上获得了许多ajax调用时,它似乎有点笨拙。显然我可以将它全部放在一个函数中,但是我仍然需要记住为我可能添加的每个ajax调用调用它。

我想知道的是,是否有某种方法可以添加一个全局的ajax处理程序,我可以在其中放置我的登录重定向代码,并确保在调用done方法之前执行它个人的ajax请求。所以我可以正常地写我的ajax请求......

.done(function (data) {
   alert('all done');
   //do other stuff
}

全局处理程序将确保正确处理401。

问题是.ajaxComplete()在.done之后执行,因此我的ajax代码会错误地通知用户该请求已成功处理,而实际上它还没有。

有没有人知道是否有办法设置一个将在.done之前执行的全局ajax处理程序?

0 个答案:

没有答案