当发生UNAUTHORIZED错误时,xhr对象中没有可用的标头 - IE10

时间:2016-04-30 11:43:06

标签: ajax internet-explorer http-headers cors asp.net-web-api2

我对web api进行了CORS Ajax调用。我有一个消息处理程序抛出:

var msg = new HttpResponseMessage(HttpStatusCode.Unauthorized) { ReasonPhrase = "Oops!!!" };
throw new HttpResponseException(msg);

在客户端,我无法获得响应标头,尝试:

error: function (xhr, error) {
var result = xhr.getResponseHeader("Response");

但结果为null,没有其他heades可用。 调试器正确显示401!

我应该以不同于服务器的方式返回Unauthorized Exception吗?

更新: 我忘了将Origin标头添加到我的HttpResponseException中,以获取标题。

但是在IE10中,我没有获得任何标题,只有错误消息

  

"错误"

使用IE10时,如何知道发生了什么? Here是相关问题。

1 个答案:

答案 0 :(得分:0)

因为我在返回401响应时无法获得Headers。 不,我返回NoContent StatusCode,它触发AJAX成功事件处理程序。 现在我必须在成功事件处理程序中检查响应头“响应”(我在服务器端手动添加),以使其在IE 10中工作:

服务器

var msg = new HttpResponseMessage(HttpStatusCode.NoContent) { ReasonPhrase = "UNAUTHORIZED" };
msg.Headers.Add("RESPONSE", "401");
AddCORSHeaders(msg.Headers, request);
return await Task.FromResult(msg);

<强>客户端:

 error: function (jqXhr, error) {
           var isAuth= jqXhr.getResponseHeader("Response");

现在我得到一个值为401的“响应”标题。

如果有人采用更好的方法,我将不再接受答案!

在IE10中,ajax错误eventhandler你得到readyState = 0和status =“”。 在Chrome中,您获得401和readyState = 4。