无法在Ionic Angular应用程序中从HttpClient读取HttpResponse中的自定义标头

Nel*_*ves 9 rest http ionic-framework angular

我正在请求创建新资源的端点,并返回包含带有新创建资源的"Location"标头的201响应:

在Chrome上进行网络检查

但是,当我尝试获取Angular guide中描述的标头值时,我得到一个"null"值而不是实际值.这是我的代码(注意:我正在设置responseType:'text'以避免Json解析错误,因为响应主体为空):

(...)
import { HttpClient } from '@angular/common/http';

(...)

  constructor(public navCtrl: NavController, public navParams: NavParams, public http: HttpClient) {
  }

  ionViewDidLoad() {
    let obj = {nome : "SomeName"}
    this.http.post("http://localhost:8080/categorias", obj, {observe: 'response', responseType: 'text'})
    .subscribe(
        (resp) => {
          console.log(resp.headers.get('Location'));
        }
      );
  }
Run Code Online (Sandbox Code Playgroud)

我甚至尝试过console.log(resp.headers)来检查这个对象,它显示了一个完全不同的结构:

在此输入图像描述

如何从新的HttpClient Angular API中获取HttpResponse对象的自定义标头?

小智 11

我在eTag标题中遇到了类似的问题:这是一个Cross Origin问题.

根据我的记忆,CORS只返回一些简单的标题,例如Cache-Control,Content-Language,Content-Type,Expires,Last-Modified等.

如果要返回特定标头,则必须添加另一个标头Access-Control-Expose-Headers,其中包含要随其返回的标头列表.所以,在你的情况下,Access-Control-Expose-Headers = 'location'.

您还需要更改后端以将相同的标头返回给Angular.

希望这可以帮助 !


小智 5

我也有这个问题。就我而言,我只看到 Content-Type、Pragma 和 Expiration 标头。

事实上,这不是 Angular 的问题。没有您期望的标头的原因是 CORS。

添加'access-control-expose-headers' : 'Location'API 可以解决您的问题:)