我尝试访问flatMap中的响应标头
this.http.post<HttpResponse<any>>(`${environment.URL_API}/patients/v1/`, patient, {observe: 'response'}).pipe(
flatMap((res: any) => {
console.log(res)
var location = res.headers.get('Location'); //location = null
console.log("service", location)
return this.find(location);
}),
map(a => {
return a
}));
但是res.headers.get('Location')
未定义
Chrome控制台中有一个标题
答案 0 :(得分:1)
解决方案是在后端添加Access-Control-Expose-Headers
:
header("Access-Control-Allow-Methods: ... ");
header("Access-Control-Allow-Headers: ... ");
header("Access-Control-Expose-Headers: X-Custom-header");
header("X-Custom-header: $some data");
然后在前端工作正常:
this.httpClientObject.get(url).toPromise()
.then(res => {
let data = res.headers.get('X-Custom-header');
console.log(data);
})
确实,这不是Angular问题。是API问题。带有标题
'access-control-expose-headers' : 'name-of-expose-header'
工作正常。
问题是,这不适用于标题
'access-control-expose-headers' : '*'
您不能使用*,而必须明确显示要公开的标题的名称。