如何在Angular2中设置全局自定义标头?

时间:2015-12-28 23:40:16

标签: http-headers content-type angular

我想在Angular2中将我的所有请求中的标题Content-type: application/json设置到我的后端。我在我的主app.js文件中使用它。

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中的每个请求类型一样设置它。

1 个答案:

答案 0 :(得分:8)

  1. MyOptions更改为:
  2. class MyOptions extends RequestOptions {
      constructor() { 
        super({ 
          method: RequestMethod.Get,
          headers: new Headers({
            'Content-Type': 'application/json',
            'X-Some-Header': 'some-content'
          });
        });
      }
    }
    
    1. provide(RequestOptions, {useClass: MyOptions}) AFTER后 HTTP_PROVIDERS(否则将使用默认BaseRequestOptions代替MyOptions)。
    2. bootstrap(App, [
        // ...
        HTTP_PROVIDERS,
        provide(RequestOptions, {useClass: MyOptions}) // <- after HTTP_PROVIDERS!!!
      ])
      

      请参阅this plunk