2017-09-26 4 views
1

Ich schrieb eine eckige (4.3.6) HttpInterceptor, um einige Headerfelder hinzuzufügen, aber die Kopfzeile wird nicht aktualisiert, wenn ich sie im Debugger untersuchen. Irgendeine Idee?Angular HttpInterceptor nicht ändern Header

import {Injectable} from '@angular/core'; 
import {HttpEvent, HttpInterceptor, HttpHandler, HttpRequest} from '@angular/common/http'; 
import {Observable} from 'rxjs/Observable'; 

@Injectable() 
export class AuthInterceptor implements HttpInterceptor { 


    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { 

     console.log('AuthInterceptor at work'); 

     const contentTypeReq = req.clone({ 
      headers: req.headers.set('Content-Type', 'application/json') 
     }); 

     const token = localStorage.getItem('token'); 
     if (token) { 
      const authReq = contentTypeReq.clone({ 
       headers: req.headers.set('Authorization', 'Bearer ' + token) 
      }); 
      return next.handle(authReq); 
     } 

     // Pass on the cloned request instead of the original request. 
     return next.handle(contentTypeReq); 
    } 
} 
+0

Das Festlegen des Inhaltstyps ist nutzlos. Angular macht das für Sie. Haben Sie Ihren Code mit dem Debugger ausgeführt? Oder einfach console.log() hinzugefügt, um zu überprüfen, ob das Token gesetzt ist? –

+0

Ja - Ich habe es im Debugger ausgeführt und sehe, dass es aufgerufen wird. Aber der Header wird nicht aktualisiert. Siehe https://angular.io/guide/http#setting-new-headers – netshark1000

Antwort

0

Sie sind faul. Zum Beispiel keys method wie folgt aussieht:

keys(): string[] { 
    this.init(); <== initialize 

    return Array.from(this.normalizedNames.values()); 
} 

Wenn Sie wollen, rufen Sie einfach überprüfen:

req.headers.keys() 

Wenn Sie Wert überprüfen möchten, können Sie get oder getAll Methode verwenden:

req.headers.getAll('Content-Type') 

Oder Sie können init Methode von Konsole aufrufen und dann können Sie sehen e-Header in headers Karte

enter image description here

Darüber hinaus, wenn angular adds headers to request es verwendet forEach Methode, die zu init Methode aufruft.

+0

können wir diese Header aktualisieren ... für zB In Anfrage habe ich ''x-auth-token'' gesendet und wenn 401 auftritt, möchte ich Kopfzeilen aktualisieren .. Ist das möglich? für weitere Informationen siehe auch: [https://stackoverflow.com/questions/48200491/request-header-is-not-updated-successfully-from-interceptor-angular-2-4-401-han] –

Verwandte Themen