2017-10-27 2 views
2

Ich habe eine ASP.NET-Web-API. Ich verwende Angular 4 eine einfache HTTP-Anforderung zu tun:Eckig 4 ​​- Kann nicht benutzerdefinierte HTTP-Header in HttpErrorResponse

getInfo(url: string) 
{ 
    this.http.get<MyResponse>(url).map((resultModel: MyResponse) => { 

    return resultModel; 
    }); 
} 

ich zur Antwort abonnieren thusly:

this.getInfo() 
     .subscribe(
      result => { 
       if(wasSuccess(result)) 
       { 
        do things 
       }, 
      error => { 
        if(error.status == 401) 
        { 
         var url = error.headers["x-login_page"]; 
         window.location.href = url; 
        } 
       } 
    ); 

Ich habe CORS in der ASP.NET Web API-Controller aktiviert.

Mit Blick auf die Netzwerkantwort in Chrome ich sehe, dass die CORS erlaubt sind richtig, und so sind die benutzerdefinierten Header-Einträge (x-login_page), die ich lesen will:

Screenshot of Chrome Network Output

jedoch wenn ich den benutzerdefinierten Header-Wert für x-login_page mit

var url = error.headers["x-login_page"]; 

die uRL zuzugreifen versuchen ist nicht definiert. Als ich bei dem Fehlerobjekt in den Chrome-Debugger anschaue, sehe ich, dass das Fehler-Objekt ist ein HttpErrorResponse Objekt:

Screenshot HttpErrorResponse

Wenn ich die Header erweitern, können Sie sehen, dass sie in irgendeiner Weise nicht ähneln der gezeigt Header im Netzwerk Antwort:

Screenshot headers

ich nicht einen Weg finden, können die tatsächlichen hTTP-Header in den Fehler fangen zu bekommen, anstatt einige substituierte Header. Offen für alle Vorschläge. Vielen Dank!

Antwort

1

HttpErrorResponse ist nicht nur ein Array, es ist ein komplexes Objekt. Verwenden Sie die get Methode, um Ihre URL zu erhalten.

var url = error.headers.get("x-login_page")

+0

Oh für die Liebe .... DANKE! – user2047553

+0

Kein Problem! Wenn Sie keine IDE mit Autocomplete verwenden, ist dies nicht sehr offensichtlich. Vergiss nicht, es als die richtige Antwort zu markieren, wenn es für dich funktioniert hat;) – jamesthollowell