0

Ich habe einen CORS Ajax Aufruf an eine Web API. Ich habe eine Nachricht Handler, der eine wirft:Keine Header im xhr Objekt verfügbar, wenn ein UNAUTHORIZED Fehler auftritt - IE10

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

Auf dem Client ich nicht keine Antwort-Header bekommen, versucht:

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

aber Ergebnis ist null und keine anderen heades zur Verfügung. Der Debugger zeigt korrekt eine 401!

Sollte ich die Unauthorized Exception anders als den Server zurückgeben?

Update: Ich habe vergessen, den Origin-Header zu meiner HttpResponseException hinzuzufügen, um die Header zu erhalten.

Aber in IE10 Ich erhalte keine Header, nur Fehlermeldung

"Fehler"

Wie kann ich wissen, was passiert, wenn IE10 mit? Here ist verwandte Frage.

Antwort

0

Wie ich die Header nicht erhalten kann, wenn eine Antwort 401 zurückgibt. Nein, stattdessen gebe ich NoContent StatusCode zurück, wodurch der AJAX-Eventhandler ausgelöst wird. Jetzt muss ich die Antwort-Header "Antwort" prüfen den Erfolg Eventhandler (die ich auf der Server-Seite manuell hinzufügen), um es 10 in IE funktioniert:

Server:

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

Auftraggeber:

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

ich mit dem Wert einer "Antwort" Header Jetzt bekommen 401.

WENN JEMAND EINEN BESSEREN ANSATZ HAT, NEHME ICH DIE ANTWORT!

In IE10 der Ajax Fehler Eventhandler Sie erhalten ReadyState = 0 und Status = "". In Chrome erhalten Sie eine 401 und readyState = 4.