3

我有一个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请求时,似乎我的获取请求已取消。最初,我认为这是因为我的授权属性导致它取消请求,但是,它似乎在它到达我的处理程序之前就取消了。

4

2 回答 2

2

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

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

于 2013-11-01T10:55:34.567 回答
2

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

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

我从这个 SO answer得到这个答案,在撰写本文时它有超过 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";
}):

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

于 2013-11-01T11:37:50.117 回答