2015-12-28 8 views
6

Ich möchte die Header Content-type: application/json in alle meine Anfragen an mein Backend in Angular2 setzen. Ich benutze dies in meiner Hauptdatei app.js.Wie legen Sie globale benutzerdefinierte Header in Angular2 fest?

let headers = new Headers({ 
    'Content-Type', 'application/json' 
}) 
class MyOptions extends BaseRequestOptions { 
    headers: headers 
} 

bootstrap(App, [ 
    provide(RequestOptions, {useClass: MyOptions}), 
    ROUTER_BINDINGS, 
    HTTP_PROVIDERS, 
    bind(APP_BASE_HREF).toValue('/') 
]) 

Ich erwarte alle Verwendungen von Http den neuen Content-Typ zu verwenden, aber dieser Code hat immer noch den Content-Type auf text/plain

saveMaster (master) { 
    return this.http 
    .put(`${config.API_URL}/masters/${master._id}`, JSON.stringify(master)) 
    .map(res => res.json()) 
} 

Ich habe manuell die Header gesetzt für jede Anfrage, damit es richtig funktioniert. Mache ich etwas falsch?

Hinweis: Ich möchte eine Header-Option global festlegen, muss nicht mit jedem Anforderungstyp wie in this solution gefunden werden.

+2

Mögliche Duplikat siehe [Angular2 - Set-Header für jede Anfrage] (http://stackoverflow.com/questions/34464108/angular2-set-headers-for-every-request) –

+0

@MarkRajcok Diese Antwort setzt immer noch benutzerdefinierte Header für jede Art von Anfrage manuell. Ich werde morgen alexpods Lösung versuchen. –

Antwort

8
  1. ändern MyOptions zu:
class MyOptions extends RequestOptions { 
    constructor() { 
    super({ 
     method: RequestMethod.Get, 
     headers: new Headers({ 
     'Content-Type': 'application/json', 
     'X-Some-Header': 'some-content' 
     }); 
    }); 
    } 
} 
  1. Put provide(RequestOptions, {useClass: MyOptions})NACHHTTP_PROVIDERS (sonst BaseRequestOptions Standard statt Ihrer MyOptions wird verwendet).
bootstrap(App, [ 
    // ... 
    HTTP_PROVIDERS, 
    provide(RequestOptions, {useClass: MyOptions}) // <- after HTTP_PROVIDERS!!! 
]) 

this plunk

+0

Das funktioniert gut. Leider funktioniert dies nicht mit dynamischen Headern (zB: Header, der von Cookies abhängt, die sich ändern können). Der Konstruktor wird nur einmal beim Laden ausgewertet. – astreal

+0

Für dynamische Header können Sie die HTTP-Klasse erweitern und die Methode 'request' ändern, um benutzerdefinierte Header für jede Anfrage hinzuzufügen. Ich habe einen umfassenden Leitfaden dafür geschrieben - http://www.adonespitogo.com/articles/angular-2-extending-http-provider/ –

Verwandte Themen