这些标头之间有什么区别?

时间:2019-08-06 17:47:38

标签: angular http post request-headers

使用JWT Auth时出现问题。检查我的代码后,我意识到调用POST方法时不包括标头(包含承载令牌)。标头可以在GET方法上很好地工作,而不能在POST方法上工作。

我看了一个例子,我意识到还有另一种“构建”标题的方法。我更改了它,然后它起作用了。

因此,现在我将一个httpOptions用于GET方法,将另一个用于POST方法。

这是我的代码。请注意,我将getHttpOptions用于“ GET”,将postHttpOptions用于“ POST”。

headers = new Headers();
getHttpOptions: any;
postHttpOptions: any;

constructor(
    private http: Http,
    private httpClient: HttpClient,
    @Inject(APP_CONFIG) private config: AppConfig,
    private env: EnvService,
) {
    this.headers.append("Accept", "*/*");
    this.headers.append("Content-Type", "application/json");
    this.headers.append("Authorization", "Bearer " + globals.user.Token);
    this.getHttpOptions = { headers: this.headers };

    this.postHttpOptions = {
        headers: new HttpHeaders({
            'Accept': '*/*',
            'Content-Type': 'application/json',
            'Authorization': 'Bearer ' + globals.user.Token,
        }),
    };
}

在“获取”时调用:

MyOtherFunction(User: string) {
    const url = this.env.apiUrl + `fantasy/world/` + User;
    return this.http.get(url, this.getHttpOptions)
        .pipe(map((response: Response) => response.json()));
}

在“ POST”时调用:

MyFunction(operacion: any) {
    const url = this.env.apiUrl + `real/world`;

    return this.httpClient.post(url, operacion, this.postHttpOptions);
}

1 个答案:

答案 0 :(得分:0)

HttpHeaders是一个不变的对象。您不能直接修改它。每个进行更改的方法都会返回该对象的新实例。

    this.headers = this.headers.append("Accept", "*/*");
    this.headers = this.headers.append("Content-Type", "application/json");
    this.headers = this.headers.append("Authorization", "Bearer " + globals.user.Token);

append()的文档内容为:

  

带有附加值的HTTP标头对象的克隆。