Ajax 请求在 HandleUnauthorizedRequest 之前命中错误函数

Ajax request hitting error function before HandleUnauthorizedRequest

本文关键字:错误 函数 请求 HandleUnauthorizedRequest Ajax      更新时间:2023-09-26

我有一个PhoneGap应用程序,它正在与C#服务通信以获取数据。用户必须登录才能访问其中的任何内容,因此我的控制器上有AuthorizeAttribute。这工作正常且正确,向我的应用程序抛出一个。对我来说的问题是,在我的AuthorizeAttribute中,我正在覆盖HandleUnauthorizedRequest方法,它应该返回 401。事实上,可能是,只是 Ajax 处理程序在我的覆盖方法返回之前命中了错误函数。

授权属性

public class AppCustomAuthorization : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        filterContext.HttpContext.Response.StatusCode = 401;
        filterContext.HttpContext.Response.End();
        base.HandleUnauthorizedRequest(filterContext);
    }
}

阿贾克斯

$.ajax({
    type: "GET",
    url: url + "checkin/app/info",
    dataType: "json",
    success: function(d) {
        // Do stuff
    },
    error: function (xhr, textStatus, errorThrown) {
        app.showError(errorThrown); // Status code is 0
    }
});

当我查看Network请求时,似乎我的 get 请求被取消了。最初,我认为这是因为我的授权属性导致它取消请求,但是,它似乎在到达我的处理程序之前就取消了。

这可能是因为同源策略。看看这个:

http://docs.phonegap.com/en/1.9.0/guide_whitelist_index.md.html

只是为了结束完整的问题,我看到响应代码为 0 的原因是:

状态代码"0"通常表示用户导航到不同的 AJAX 调用完成之前的页面

我从这个SO答案中得到了这个答案,在撰写本文时有超过70,000次观看,所以我想这个问题可能会发生很多。这显然促使我查看可能导致我的应用程序导航到其他地方的原因,果然,在我的代码中,我有:

$('[data-role=page]').on('pageshow', function (event, ui) {
if ($(location).attr('pathname').indexOf('login.html') == -1)
    if (window.localStorage['UserName'] == null || window.localStorage['Password'] == null) 
        window.location = "login.html";
}):
作为

应用程序开发的早期阶段的解决方法,作为检查用户实际登录的原始类型。