首页 文章

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

提问于
浏览
6

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

Network inspecting on Chrome

但是,当我尝试获取Angular guide中描述的标头值时,我得到一个"null"值而不是实际值 . 这是我的代码(注意:我'm setting responseType:'文本'以避免响应体为空时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'));
        }
      );
  }

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

enter image description here

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

2 回答

  • 7

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

    根据我的记忆,CORS只返回几个简单的 Headers ,例如Cache-Control,Content-Language,Content-Type,Expires,Last-Modified等 .

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

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

    希望这可以帮助 !

  • 1

    我也有这个问题 . 在我的例子中,我只看到了Content-Type,Pragma和Expiration Headers .

    事实上,这不是一个角度问题 . 没有你期望的 Headers 的原因是CORS .

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

相关问题