gpt4 book ai didi

lazyUpdate 中的 Angular HttpClient 补丁 header

转载 作者:行者123 更新时间:2023-12-05 02:30:41 24 4
gpt4 key购买 nike

在我的 Angular 项目中,我使用的是 HttpClient (@angular/common/http)。我使用 POST、GET 和 DELETE 方法成功地执行了大量 API 请求,始终发送到相同的后端 URL 并包含相同的 header (Bearer Authentication)。一旦我执行 PATCH 请求(相同的 URL,相同的 header ),服务器就会提示“401 未授权”状态。我检查了标题是否与 PATCH 一起正确发送,但事实并非如此。当对请求使用以下代码片段时,我发送的 header 以某种方式设置在 header 的 lazyUpdate 部分(但仅适用于 PATCH。POST、GET、DELETE 工作正常),这是不正确的:

let headers = new HttpHeaders();
headers = headers.
set('content-type', 'application/json').
set('Authorization', 'Bearer <myToken>');

this.httpClient.patch(<my_patch_url>, { 'headers': headers });

另一方面,当使用以下代码时, header 设置正确,但仍然无法识别:

const headers = {
'content-type': 'application/json',
'Authorization': 'Bearer <myToken>')
}

this.httpClient.patch(<my_patch_url>, { 'headers': headers });

因此,除了 PATCH 请求外,一切正常。

有人知道为什么 PATCH 以错误的方式发送 header 吗?

提前致谢。干杯

最佳答案

我自己找到了这个问题的解决方案:

这与您如何添加 header 无关,而是使用 PATCH 方法的请求可能还需要一个反射(reflect)实际应该更新的参数的主体(@param body — 要编辑的资源)。

参见 PATCH 的定义:

(method) HttpClient.patch(url: string, body: any, options?: {
headers?: HttpHeaders | {
[header: string]: string | string[];
};

这个有效:

const headers = {
'content-type': 'application/json',
'Authorization': 'Bearer <myToken>')
}

this.httpClient.patch(patch_url, "", { 'headers': headers });

在我的例子中,正文部分是空的 (""),因为后端不接受任何其他内容。

关于lazyUpdate 中的 Angular HttpClient 补丁 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71779609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com