我对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是相关问题。
答案 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。