【问题标题】:angular 5 httpclient , on post , the response does not return custom headers, only returns response objectangular 5 httpclient ,在 post 上,响应不返回自定义标头,仅返回响应对象
【发布时间】:2018-11-19 20:34:06
【问题描述】:

使用 Angular 5 通用 httpClient 进行 http post 调用时,我没有得到实际的 http 标头。我正在通过 observe: 'response' 在请求中获取完整响应(默认情况下 httpClient 仅返回响应正文)。

我想从 http 标头响应中读取 csrftoken 值。我可以看到 csrftoken 在使用 chrome 浏览器网络视图的响应标头中可用。

但是当我在 Angular 中读取 httpClient 响应时,同样不可用。

 post(inURL, data, config = undefined) {
    let headers, options;
    if (config){
        options = config;
    } else {
        //headers = this.getDefaultHeader();
        //options = new RequestOptions({ headers: headers });
        options = httpOptions;
    }
    options = { ...options, observe: 'response' };

    let action = this.httpService.post(inURL, data, options);
    return new Promise((resolve, reject) => {
        action.subscribe(
            response => resolve(response),
            error => {
                this.interceptError(error);
                reject(error);
            }
        );
    });

    }

在 chrome 调试器上调试时响应头对象看起来像这样,因为您看到 csrftoken 不能用作响应对象上的键

这是我用于访问 httpheaders 的内容

   let headers: HttpHeaders = response.headers;
    if (headers && headers['csrftoken']) {
        let token: String = headers.get('csrftoken');
    }

【问题讨论】:

  • 您是否至少尝试过从 HttpHeaders 对象中获取令牌?显示该代码。
  • @JBNizet 添加了访问 httpheadersobject 的代码并更新了帖子
  • 这里是 HttpHeaders 的文档:angular.io/api/common/http/HttpHeaders。这不是 POJO。使用headers.has('csrftoken')
  • 太棒了,成功了,谢谢@JBNizet

标签: angular angular-httpclient custom-headers csrf-token


【解决方案1】:

正如 cmets 中已经建议的那样,您无法以您的方式检查标头是否存在。您需要使用has 方法。您的代码应如下所示:

let headers: HttpHeaders = response.headers;
if (headers && headers.has('csrftoken')) {
   let token: String = headers.get('csrftoken');
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多