【问题标题】:angular 4 how to http put with If-Match角度 4 如何使用 If-Match 进行 http 放置
【发布时间】: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


【解决方案1】:

总结大量的 cmets 来解决这个问题。 后端不接受 HTTP PUT 命令,因为标头设置不正确。因此,要解决此问题,您应该在代码中正确添加这两个标头。有几种方法。我提出了一个,基于构造函数,但还有更多。

基于构造函数:

const header = 
new HttpHeaders({'Content-Type': 'application/javascript', 'If-Match' : task.etag});

使用 append 方法(正如 question 建议的那样):

const headers = new HttpHeaders();
headers.append('Content-Type', 'application/javascript');
headers.append('If-Match', task.etag);

注意header 声明中所做的更改。我建议const 而不是var

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 2017-10-13
    • 2014-02-08
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多