jquery ajax未经授权的请求,返回“NetworkError”并且状态为0

时间:2013-12-12 14:03:59

标签: ajax asp.net-web-api cors http-status-code-401

我的主要目标是了解在使用ajax和asp.net web api后端的客户端(浏览器)之间的授权过程中究竟发生了什么。

所以最初,我通过浏览器中的ajax向我的一个控制器发出一个简单的GET请求(允许“Access-Control-Allow-Origin”)。我接受了我想要的回复,到目前为止一切正常。

然后,我在web api上的同一个控制器上设置了一个authorize属性,我再次制作一个简单的GET请求来研究结果。所以,在firebug的帮助下,我看到有一个“NetworkError:401 Unauthorized - localhost / api / values”。

此外,在结果对象上,我看到以下值:readyState:0,responseText:“”,status:0,statusText:“error”。这是正常的吗?我不应该看到例如状态:401? 我想我可以使用这个线程的公认解决方案:Unauthorized AJAX request succeeds 但我更倾向于更严格地检查潜在的401结果。

我想到的一点是,默认情况下,当您使用authorize属性时,未经授权的响应中的asp.net Web API可能不包含“Access-Control-Allow-Origin”标头,因此我全局添加一个自定义操作过滤器,它为每个响应添加了“Access-Control-Allow-Origin”,但它没有解决我的问题,所以我想情况并非如此。

1 个答案:

答案 0 :(得分:2)

我找到了一个解决方案。我最终证明了导致这个问题的原因是准确的。当未经授权的请求到达需要授权的控制器(使用authorize属性)时,响应不包括标题“Access-Control-Allow-Origin”。因此,客户端上jqXHR的状态为0而不是401.

所以我将“Access-Control-Allow-Origin”添加到asp.net web api Web.config并最终正常工作。