移动端:ajax调用后报error错误,返回错误状态码为0

mvc项目通过Microsoft.Owin、ClaimsIdentity进行存储用户信息,包括cookie。有时候用户信息需要更新到ClaimsIdentity,这个时候就需要从新写cookie,如下代码:

AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = false }, identity); 

如果是通过ajax请求数据,并且重新更新用户信息,那也不会出现问题,在PC浏览器以及移动端浏览器都能成功,但是如果你把h5网站嵌入到别人开发的app里呢,就不一定会成功了。

跟别的公司有个项目合作,我方提供H5网站,要讲此网站嵌入到他方公司的app里,通过webView进行访问,经测试发现ajax请求一直报错误,排除发现问题,定位到AuthenticationManager.SignIn时就出错,注释掉就能正常返回请求数据。同时在微信、支付宝等app里测试,不会出错,只有在那个app才会出现这个问题,初步判断就是写cookie有问题。

同时咨询了对方,查看app内置的浏览器是什么核,发现是webkit内核,但是测试后的结果和这个无关,还不是内核原因。

继续排除错误,让同事写一个简单的app,嵌入H5网站地址,经测试也没有问题。

经过和同事的共同努力,最终还是解决了问题。


前端通过post进行ajax请求,获取数据:

$.ajax({
             type: "post",
             url: "api/user",
             data: {id:"1"},
             success: function(data){
                   alert("success") //成功
              },
             error: function (data, textStatus, jqXHR) {
                  alert("error") //失败
             }
         });

后端:Controller

 public ActionResult User(string id)
 {
       var user=UserQuery.GetUser(id)
       AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = false }, identity);  //此处出现问题
       return Json(user);
}

通过此方法请求并返回数据是正常的,不会出现问题。

解决办法:

 public ActionResult User(string id)
 {
       var user=UserQuery.GetUser(id)
       AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = false }, identity);  //此处出现问题

       string jsonData = Json.Default.Serialize(user);//封装的序列化方法
       return Content(jsonData, "application/json", Encoding.UTF8);

       //return Json(user);
}

换了一种方式返回数据,通过Content进行返回处理,应该是App里做了编码处理,导致的。






  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值