【问题标题】:Unable to see the added headers to HTTP request in Angular无法在 Angular 中看到添加到 HTTP 请求的标头
【发布时间】:2021-05-05 03:04:44
【问题描述】:

大致遵循this answer 并检查header manipulation 上的Angular 文档,我添加了以下拦截器类(如here 所示)。

注意。它被调用并且对请求对象的其他操作(例如使其成为 HTTPS 等)起作用。但是,添加/附加和更新/设置的标头似乎都没有显示。

export class CoolInterceptor implements HttpInterceptor {
  intercept(request: HttpRequest<any>, next: HttpHandler)
    : Observable<HttpEvent<any>> {

    request.headers.append("Shazoo", "Hazaa");
    request.headers.set("Content-Type", "application/text");

    console.log(request.headers);

    return next.handle(request);
  }
}

由于某种原因,显示的对象不包含被操纵的标题。我收到以下内容。

HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, headers: Map(0)}

如果我在控制台中手动运行appendset,我会看到对象发生了一些变化。遗憾的是,它没有告诉我任何有用的信息 lazyArray 现在包含一个元素,也没有告诉我为什么它在执行期间打印时不包含任何内容。

HttpHeaders {normalizedNames: Map(0), lazyUpdate: Array(1), headers: Map(0), lazyInit: HttpHeaders}

我已经研究了一段时间,我相信我做对了,除了一些我无法检测或诊断的小错误。

如何在拦截器中更改请求的标头对象?

或者,尽管the docs,拦截器是此类功能位置的糟糕选择?那将跟随this suggestion。我还看到someone 通过RequestOptions 和/或更改注入的HttpClientthis.http.get(...) 参数(如this)提出了不同的方法。

【问题讨论】:

  • 你引用了 angular 文档,但你没有遵循它们。您需要克隆请求,更改克隆(设置标头)并在拦截器中返回。
  • @R.Richards 我们同意我不遵循文档。我不确定我到底偏离了哪里。但现在我看到了双重陷阱。部分,我需要克隆,就像它说的那样。部分地,我必须根据其不变性来操作 headers 对象,如下面的答案所示。我尝试了两种方式。只是不是同时,呵呵。随意将其发布为答案(或让我知道,以便我自己回答,尽管我认为这是一个俗气的举动)。

标签: angular http http-headers httpclient


【解决方案1】:

HttpHeaders 上的 set 方法不会改变对象,而是创建一个副本。因此,虽然

    request.headers.set("Content-Type", "application/text");

行不通, [编辑:request 本身是不可变的,因此需要克隆]

    const clonedWithRequiredHeaders = request.clone({
        setHeaders: {"Content-Type": "application/text"},
    })

应该。

【讨论】:

  • 我不确定这是否可行。字段headers 是只读的,无法分配。检查我在讨论它的 Angular 页面上链接到的示例。
  • 你应该先克隆请求,然后你就可以了。 (request.clone)
  • @MikeOne 是的,双面陷阱,那个东西。现在,我得到了帮助,我清楚地看到了文档中的说明。我声称我的观点是正确的,但我却陷入了一个小小的愚蠢错误,这绝对是正确的。我的坏,完全,呵呵。
  • @mbojko 请根据 cmets 更新您的回复。我很乐意接受它作为正确答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-15
  • 1970-01-01
  • 2012-12-01
  • 2018-05-04
  • 2016-10-16
  • 2018-04-21
  • 1970-01-01
相关资源
最近更新 更多