2015-12-28 16 views
6

Voglio impostare l'intestazione Content-type: application/json in tutte le mie richieste al mio backend in Angular2. Lo uso nel mio file principale app.js.Come si impostano le intestazioni personalizzate globali in Angular2?

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('/') 
]) 

mi aspetto tutti gli usi del Http per utilizzare il nuovo tipo di contenuto, ma questo codice ha ancora il tipo di contenuto impostato text/plain

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

ho per impostare manualmente le intestazioni per ogni richiesta per farlo funzionare correttamente. Sto facendo qualcosa di sbagliato?

Nota: Desidero impostare un'opzione di intestazione a livello globale, non è necessario impostarla con ogni tipo di richiesta come si trova in this solution.

+2

Possibile duplicato di [Angular2 - headers impostati per ogni richiesta] (http://stackoverflow.com/questions/34464108/angular2-set-headers-for-every-request) –

+0

@MarkRajcok Questa risposta sta ancora impostando manualmente intestazioni personalizzate per ogni tipo di richiesta. Proverò la soluzione di alexpods domani. –

risposta

8
  1. Cambio MyOptions a:
class MyOptions extends RequestOptions { 
    constructor() { 
    super({ 
     method: RequestMethod.Get, 
     headers: new Headers({ 
     'Content-Type': 'application/json', 
     'X-Some-Header': 'some-content' 
     }); 
    }); 
    } 
} 
  1. Mettere provide(RequestOptions, {useClass: MyOptions})DOPOHTTP_PROVIDERS (altrimenti di default BaseRequestOptions verranno utilizzati al posto del tuo MyOptions).
bootstrap(App, [ 
    // ... 
    HTTP_PROVIDERS, 
    provide(RequestOptions, {useClass: MyOptions}) // <- after HTTP_PROVIDERS!!! 
]) 

Vedi this plunk

+0

Questo funziona bene. Purtroppo questo non funziona con intestazioni dinamiche (ad esempio: intestazione che dipende dai cookie che possono cambiare). Il costruttore verrà valutato solo una volta al momento del caricamento. – astreal

+0

Per le intestazioni dinamiche, è possibile estendere la classe http e modificare il metodo 'request' per aggiungere intestazioni personalizzate per ogni richiesta. Ho scritto una guida completa per questo - http://www.adonespitogo.com/articles/angular-2-extending-http-provider/ –

Problemi correlati