Angular lazyUpdate 中的 HttpClient 补丁 Headers
Angular HttpClient Patch Headers in lazyUpdate
在我的 Angular 项目中,我使用的是 HttpClient (@angular/common/http)。
我使用 POST、GET 和 DELETE 方法成功地执行了很多 API 请求,始终发送到相同的后端 URL 并包括相同的 headers(不记名身份验证)。
一旦我执行 PATCH 请求(相同 URL,相同 headers),服务器就会抱怨“401 未授权”状态。
我检查了 headers 是否与 PATCH 一起正确发送,但它们不是。
当对请求使用以下代码片段时,我发送的 headers 以某种方式设置在 Headers 的 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 });
另一方面,当使用以下代码时,headers 设置正确,但仍然无法识别:
const headers = {
'content-type': 'application/json',
'Authorization': 'Bearer <myToken>')
}
this.httpClient.patch(<my_patch_url>, { 'headers': headers });
因此除了 PATCH 请求外,一切正常。
有人知道为什么 PATCH 以错误的方式发送 headers 吗?
提前致谢。
干杯
我自己找到了解决这个问题的方法:
这与您如何添加 header 无关,而是使用 PATCH 方法的请求可能还需要一个 body 来反映实际应该更新的参数(@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 });
在我的例子中,body 部分是空的 (""),因为后端不接受任何其他内容。
在我的 Angular 项目中,我使用的是 HttpClient (@angular/common/http)。 我使用 POST、GET 和 DELETE 方法成功地执行了很多 API 请求,始终发送到相同的后端 URL 并包括相同的 headers(不记名身份验证)。 一旦我执行 PATCH 请求(相同 URL,相同 headers),服务器就会抱怨“401 未授权”状态。 我检查了 headers 是否与 PATCH 一起正确发送,但它们不是。 当对请求使用以下代码片段时,我发送的 headers 以某种方式设置在 Headers 的 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 });
另一方面,当使用以下代码时,headers 设置正确,但仍然无法识别:
const headers = {
'content-type': 'application/json',
'Authorization': 'Bearer <myToken>')
}
this.httpClient.patch(<my_patch_url>, { 'headers': headers });
因此除了 PATCH 请求外,一切正常。
有人知道为什么 PATCH 以错误的方式发送 headers 吗?
提前致谢。 干杯
我自己找到了解决这个问题的方法:
这与您如何添加 header 无关,而是使用 PATCH 方法的请求可能还需要一个 body 来反映实际应该更新的参数(@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 });
在我的例子中,body 部分是空的 (""),因为后端不接受任何其他内容。