angular - 无法在 Angular 中看到添加到 HTTP 请求的标头
问题描述
大致遵循这个答案并检查有关标头操作的 Angular 文档,我添加了以下拦截器类(如此处所示)。
注意。它被调用并且对请求对象的其他操作(例如使其成为 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)}
如果我手动运行append
或set
在控制台中运行,我会看到对象发生了一些变化。遗憾的是,它没有告诉我lazyArray
现在包含一个元素的任何有用信息,也没有告诉我为什么它在执行期间打印时不包含任何内容。
HttpHeaders {normalizedNames: Map(0), lazyUpdate: Array(1), headers: Map(0), lazyInit: HttpHeaders}
我已经研究了一段时间,我相信我做对了,除了一些我无法检测或诊断的小错误。
如何在拦截器中更改请求的标头对象?
或者,尽管有文档,但拦截器对于此类功能的位置选择是否不佳?那将遵循这个建议。我还看到有人RequestOptions
通过和/或通过改变this.http.get(...)
注入的参数来提出不同的方法HttpClient
,就像这样。
解决方案
set
on 方法HttpHeaders
不会改变对象,但会创建一个副本。因此,虽然
request.headers.set("Content-Type", "application/text");
不起作用,
[编辑:request
本身是不可变的,因此需要克隆]
const clonedWithRequiredHeaders = request.clone({
setHeaders: {"Content-Type": "application/text"},
})
应该。
推荐阅读
- sql - 使用 charindex 将字段与搜索匹配
- wpf - 如果集合包含可见性设置为可见
- excel - 使用 selenium 下载 wistia 链接
- asp.net - 在不使用授权的情况下保护 API 端点
- react-native - 如何在反应原生相机中实现 HDR 设置?
- internet-explorer-11 - 有没有办法打破长文本而不在 EDGE / IE11 中定义宽度或最大宽度?
- google-cloud-platform - 从 Google Cloud Storage 复制时排除特定文件或目录
- google-analytics - 分析自定义事件被 GTM 覆盖?EventLabel 总是“(未设置)”
- prestashop - 如何为自定义文本设置价格?
- php - Laravel 如何使用关系子加入