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

8

我希望在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中找到的每个请求类型都要设置它。


2
可能是重复的问题:Angular2 - 为每个请求设置标头 - Mark Rajcok
@MarkRajcok 那个答案仍然是手动为每种类型的请求设置自定义标头。我明天会尝试alexpods的解决方案。 - Shane Stillwell
1个回答

8
MyOptions更改为:
class MyOptions extends RequestOptions {
  constructor() { 
    super({ 
      method: RequestMethod.Get,
      headers: new Headers({
        'Content-Type': 'application/json',
        'X-Some-Header': 'some-content'
      });
    });
  }
}
  1. HTTP_PROVIDERS之后放置provide(RequestOptions, {useClass: MyOptions})(否则默认的BaseRequestOptions将会被使用而不是你的MyOptions)。
bootstrap(App, [
  // ...
  HTTP_PROVIDERS,
  provide(RequestOptions, {useClass: MyOptions}) // <- after HTTP_PROVIDERS!!!
])

请查看这个示例


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - astreal
对于动态头,您可以扩展http类并修改“request”方法以为每个请求添加自定义标头。我已经为此撰写了一份全面的指南 - http://www.adonespitogo.com/articles/angular-2-extending-http-provider/ - papar
对于 **NG4+**(我目前使用的是Angular 6),这个答案对我有帮助 => https://dev59.com/JVsW5IYBdhLWcg3w66qH#45221680 - Eric D. Johnson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接