我有一个PhoneGap
应用,正在与C#
服务进行通信以获取数据。用户必须登录才能访问其中任何一个,因此我的控制器上有AuthorizeAttribute
。这工作正常,正确,投入到我的应用程序。对我来说问题是,在我的AuthorizeAttribute
中,我覆盖了HandleUnauthorizedRequest
方法,而 应该 返回401.实际上,它可能是是的,只是Ajax处理程序在我的override方法返回之前命中了错误函数。
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
次请求时,我的获取请求似乎已取消。最初,我认为这是因为我的authorize属性导致它取消请求,但是,它似乎在它到达我的处理程序之前取消。
答案 0 :(得分:2)
这可能是因为同源政策。看看这个:
http://docs.phonegap.com/en/1.9.0/guide_whitelist_index.md.html
答案 1 :(得分:2)
为了结束完整的问题,我看到响应代码为0的原因是:
状态代码“0”通常表示用户导航到其他人 AJAX调用完成之前的页面
我是从 this 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";
}):
作为从应用程序开发的早期阶段开始的解决方法,作为一种原始类型的检查,用户实际上已登录。