【发布时间】:2017-12-08 12:53:23
【问题描述】:
我的脚本将完成这项工作:
updateTask(task:Task){
const body = task;
var headers = new HttpHeaders();
headers.set('Content-Type', 'application/javascript');
headers.set('If-Match', task.etag);
return this.httpc.put(this.resources+'/'+task.id, body, { headers: headers });
}
任何人都可以看看它并告诉我我是否在这里做错了什么?以前从未尝试过,实际上我是角度的初学者:S(后端不是我的,所以我无法与你们分享:/)
httpc 是一个 HttpClient :) 提前感谢您的时间和答案! ^^.
编辑 1:
响应 > {"error":"If-Match 标头丢失或无效"}
编辑2:
请求头
PUT /app/data/schedule/tasks/42615 HTTP/1.1
Host: localhost:3000
Connection: keep-alive
Content-Length: 438
Accept: application/json, text/plain, */*
Origin: http://localhost:3000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36
Content-Type: application/json
Referer: http://localhost:3000/portal/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Cookie: sid=f5eb691a56bfa7b6db05083023c5f4caf044db47c2f29f644bc80d7bb7dcf1f3
【问题讨论】:
-
错误是什么?
this.resources是什么?什么包含Task?是javascript脚本吗?如果我们没有更多信息,很难为您提供帮助。你应该考虑提供一个Minimal, Complete, and Verifiable example。还尝试使用浏览器中的休息客户端测试您的查询(在这种情况下是放置)。可以肯定的是,例如,如果 URL 格式正确 -
我已经在没有角度的情况下对其进行了测试。我只是不确定在哪里设置 If-Match 部分。这是一个服务的功能,但它仍然无关紧要,因为主要的事情不是关于什么是 Task 或者 url 是否正确。我可以输入一个简单的数字,这样我们就可以说 Task 的数字,但这不会改变问题本身。我想我没有正确设置 If-Match 部分。 (task.etag 是一个简单的 etag 字符串,例如:“3a62ca468a0c07d6040b30a5a263a19a”)。抱歉,如果我对此不清楚:|当您需要设置 If-Match 字段时,只是没有找到任何关于 put with angular 的 Q 或示例。
-
您的问题与
task.etag有关,因为该值为null或无效。检查标头If-Match是否格式正确并具有正确的值。 -
它有我复制粘贴到括号中的值。我从 chrome 复制了请求标头,但它表明我的标头根本没有改变。
-
但是。
If-Match的header在哪里,这个header根据报错是强制的
标签: angular