使用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);
}
答案 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标头对象的克隆。