在使用Angular 5常见的httpClient进行http发布调用时,我没有得到实际的http标头。我正在传递观察:请求中的“响应”以获取完整响应(默认情况下,httpClient仅返回响应正文)。
我想从http标头响应中读取csrftoken值。我可以看到使用chrome浏览器网络视图的响应标头中提供了csrftoken。
但是当我在Angular中读取httpClient响应时,此功能不可用。
post(inURL, data, config = undefined) {
let headers, options;
if (config){
options = config;
} else {
//headers = this.getDefaultHeader();
//options = new RequestOptions({ headers: headers });
options = httpOptions;
}
options = { ...options, observe: 'response' };
let action = this.httpService.post(inURL, data, options);
return new Promise((resolve, reject) => {
action.subscribe(
response => resolve(response),
error => {
this.interceptError(error);
reject(error);
}
);
});
在chrome调试器上进行调试时,响应标头对象看起来像这样,因为您看到csrftoken不能用作响应对象上的键
这是我访问httpheaders的条件
let headers: HttpHeaders = response.headers;
if (headers && headers['csrftoken']) {
let token: String = headers.get('csrftoken');
}
答案 0 :(得分:3)
正如注释中已经建议的那样,您无法检查标头是否以您的方式存在。您需要使用has方法。您的代码应如下所示:
let headers: HttpHeaders = response.headers;
if (headers && headers.has('csrftoken')) {
let token: String = headers.get('csrftoken');
}