angular - 如何在不使用 HttpIntercepter 的情况下在 Angular 中获取自定义响应 header

标签 angular spring-boot angular-httpclient

我没有在我的 Angular 项目中使用 HttpIntercepter,我想在出现错误时检索一些自定义响应 header 。我在我的 POST API 调用中尝试了 { observe: 'response' }:

post(url, data = ''): Observable<any> {
  url = this.baseApiUrl + url;
  const headers = this.createHttpHeaders();
  const body = JSON.stringify(data);
  return this.http.post(url, body, {headers: headers, observe: 'response'}).pipe(catchError(HttpClientHelper.handleError));
}

但我只收到 4 个 header :

error.headers.keys().map( (key) => console.log(key + ':' + error.headers.get(key)));

返回

缓存控制:无缓存、无存储、max-age=0、必须重新验证 内容长度:0 过期:0 用法:无缓存

但是,不会返回带有前缀 x- 的自定义响应 header 。是否有任何配置来检索自定义响应 header ?

enter image description here

最佳答案

您可能在发送响应时没有公开此 header 。您的服务器需要发送 Access-Control-Expose-Headers header ,以便您的自定义 header 暴露给客户端。

文档: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Expose-Headers

在 spring boot 响应中,

@GetMapping("/endpoint")
public ResponseEntity<Object> someEndpoint() {

    HttpHeaders headers = new HttpHeaders();
    headers.add("x-some-header", "some_header_value");
    headers.add("Access-Control-Expose-Headers", "x-some-header"); // set this to expose custom header
    return ResponseEntity.ok()
               .headers(headers)
               .body(responseBody);

}

关于angular - 如何在不使用 HttpIntercepter 的情况下在 Angular 中获取自定义响应 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59526177/

相关文章:

spring-boot - 如何使 session 长度持续更长的时间?

cors - 调用第 3 方 API 时处理 CORS

angular - 如何解决 Angular 4 中的 ngx-toastr 版本问题

Angular - 在 forChild 路由中使用自定义预加载策略

java - 如何为无限运行(无限循环)的 Spring boot 应用程序生成 Jar 文件?

java - 调用init方法失败;嵌套异常是 java.lang.IllegalArgumentException : The namespace property is required

angular - 对同一端点执行多个 Http 请求,合并和排序响应

angular - 我如何跟踪 ionic 2 中 app.component.ts 中的每个错误

javascript - 无法读取未定义的 Angular 5 的属性 'toLowerCase'

angular - 将主机和 ComponentResolver 从 AngularDart 4 迁移到 5