首页 > 解决方案 > 在 flatMap 中访问响应标头角度 7

问题描述

我正在尝试访问 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 有一个 Header

标签: angular

解决方案


解决方案是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' : '*'

您不能使用 * 并且必须明确输入要公开的标题的名称。

请参阅access-control-expose-headers问题


推荐阅读