如何用 http.get 设置 header

How to set a header with http.get

我正在使用 Angular 4.4.4,我需要为 GET 请求设置 Authorization header。我研究了文档和代码以了解如何执行此操作。这是结果:

const headers = new Headers({ Authorization: this.auth.accessToken});
this.http.get('/api/Messages', { headers } as RequestOptionsArgs)

但是,这不起作用。请求是在没有 header 选项的情况下发出的。

但是如果我按照下面的方式去做

const options = { headers: {Authorization: this.auth.accessToken} as any};

return this.http.get('/api/Messages', options as RequestOptionsArgs)

有效。

但我希望第一次尝试也能奏效。有人可以向我解释我的第一次尝试有什么问题或向我解释正确的方法是什么吗?

related question 中所述,问题在于 Fetch API 与 @angular/http 模块中的 class 具有相同的 class 名称(它们的设计松散地基于 Fetch API).

如果未导入 Angular classes(Header、Response 等),则使用全局 classes。这会导致不正确的行为和不相关的错误,因为 Angular classes 与 Fetch API 不兼容,但 Http 不是 fool-proof.

解决方案是始终将相关的 class 与 Http 一起导入(即使不使用也可以提前完成):

import { Http, Response, Headers } from '@angular/http';

避免此问题的一种方法是切换到 HttpClient,它在最新的 Angular 4 个版本中可用,并且具有不同的 API.