2015-12-28 59 views
6

我想在我的所有請求中將標題Content-type: application/json設置爲Angular2中的後端。我在我的主app.js文件中使用這個。如何在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('/') 
]) 

我期待的Http所有用途使用新的內容類型,但是這個代碼仍然具有內容類型設置爲text/plain

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

我必須手動設置標頭每個請求讓它正常工作。難道我做錯了什麼?

注意:我想設置一個標題選項全局,而不必像每個請求類型設置它,如在this solution中找到。

+2

的可能的複製[Angular2 - 爲每個請求組報頭(http://stackoverflow.com/questions/34464108/angular2-set-headers-for-every-request ) –

+0

@MarkRajcok該答案仍然爲每種類型的請求手動設置自定義標頭。我明天會試試alexpods解決方案。 –

回答

8
  1. 更改MyOptions到:
class MyOptions extends RequestOptions { 
    constructor() { 
    super({ 
     method: RequestMethod.Get, 
     headers: new Headers({ 
     'Content-Type': 'application/json', 
     'X-Some-Header': 'some-content' 
     }); 
    }); 
    } 
} 
  • provide(RequestOptions, {useClass: MyOptions})AFTERHTTP_PROVIDERS(否則默認BaseRequestOptions將被用來代替您MyOptions的)。
  • bootstrap(App, [ 
        // ... 
        HTTP_PROVIDERS, 
        provide(RequestOptions, {useClass: MyOptions}) // <- after HTTP_PROVIDERS!!! 
    ]) 
    

    參見this plunk

    +0

    這工作很好。可悲的是,這不適用於動態標題(例如:取決於可能改變的cookie的標題)。加載時只會對構造函數進行一次評估。 – astreal

    +0

    對於動態頭文件,您可以擴展http類並修改'request'方法爲每個請求添加自定義頭文件。我爲此寫了一本全面的指南 - http://www.adonespitogo.com/articles/angular-2-extending-http-provider/ –

    相關問題