在我的 Angular 项目中,我使用 HttpClient (@angular/common/http)。
我成功地使用 POST、GET 和 DELETE 方法执行了大量 API 请求,始终发送到相同的后端 URL,并包含相同的标头(不记名身份验证)。
一旦我执行 PATCH 请求(相同的 URL、相同的标头),服务器就会抱怨“401 未经授权”状态。
我检查了标头是否与补丁一起正确发送,但事实并非如此。
当使用以下代码片段作为请求时,我发送的标头以某种方式设置在标头的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 });
另一方面,当使用以下代码时,标头设置正确,但仍然无法识别:
const headers = {
'content-type': 'application/json',
'Authorization': 'Bearer <myToken>')
}
this.httpClient.patch(<my_patch_url>, { 'headers': headers });
所以除了 PATCH 请求之外,它工作得很好。
有人知道为什么 PATCH 以错误的方式发送标头吗?
提前致谢。
干杯
我自己找到了解决这个问题的方法:
这与如何添加标头无关,而是使用 PATCH 方法的请求可能还需要一个反映实际应更新的参数的正文(@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 });
在我的例子中,主体部分是空的(“”),因为后端不接受其他任何内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)