Axios 删除带有正文和标题的请求?

IT技术 javascript reactjs http axios http-delete
2021-02-23 11:27:22

我在 ReactJS 中编程时使用 Axios,我假装向我的服务器发送 DELETE 请求。

为此,我需要标题:

headers: {
  'Authorization': ...
}

身体是由

var payload = {
    "username": ..
}

我一直在互联网上搜索,只发现 DELETE 方法需要一个“参数”并且不接受“数据”。

我一直在尝试像这样发送它:

axios.delete(URL, payload, header);

甚至

axios.delete(URL, {params: payload}, header);

但似乎没有任何效果......

有人可以告诉我是否有可能(我认为是)发送带有标头和正文的 DELETE 请求以及如何发送?

先感谢您!

6个回答

所以经过多次尝试,我发现它有效。

请按照顺序顺序这很重要,否则它将无法正常工作

axios.delete(URL, {
  headers: {
    Authorization: authorizationToken
  },
  data: {
    source: source
  }
});
可能是因为DELETE不应该有请求体。也许那里有一些东西可以防止这种情况(应该如此)
2021-04-20 11:27:22
你好,你能解释一下为什么你的答案有效吗?
2021-04-23 11:27:22
所以我原来的评论是正确的。事实上,这是来自即将到来的 HTTP 规范的一段回应:“客户端不应该在 DELETE 请求中生成内容。在 DELETE 请求中收到的内容没有定义的语义,不能改变请求的含义或目标,并且可能导致一些实现拒绝请求。”
2021-05-01 11:27:22
@VictorPudeyev 嘿,我知道 HTTP 规范中的语言令人困惑。是的,身体可能会出现,但它对服务器应该有任何意义。因此,永远没有充分的理由向 HTTP DELETE 正文添加正文。所以你可以添加一个身体,但它毫无意义。
2021-05-10 11:27:22
@Evert 那是不正确的,DELETE 请求没有为主体定义语义,因此您可以拥有请求主体,但旧的实现可能会拒绝该请求。IMO 您应该拥有请求正文,并淘汰旧客户并轮换新客户。
2021-05-14 11:27:22

axios.delete确实支持请求正文。它接受两个参数:url和可选的配置。您可以使用config.data如下设置请求正文和标头:

axios.delete(url, { data: { foo: "bar" }, headers: { "Authorization": "***" } });

见这里 - https://github.com/axios/axios/issues/897

问题是我想在同一个删除请求中发送正文和标题
2021-04-23 11:27:22

以下是使用 axios 发送各种 http 动词所需的格式的简要摘要:

  • GET: 两种方式

    • 第一种方法

      axios.get('/user?ID=12345')
        .then(function (response) {
          // Do something
        })
      
    • 第二种方法

      axios.get('/user', {
          params: {
            ID: 12345
          }
        })
        .then(function (response) {
          // Do something
        })
      

    以上两个是等价的。观察params第二种方法中关键字。

  • POSTPATCH

    axios.post('any-url', payload).then(
      // payload is the body of the request
      // Do something
    )
    
    axios.patch('any-url', payload).then(
      // payload is the body of the request
      // Do something
    )
    
  • DELETE

    axios.delete('url', { data: payload }).then(
      // Observe the data keyword this time. Very important
      // payload is the request body
      // Do something
    )
    

关键要点

  • get请求可选地需要一个params键来正确设置查询参数
  • delete带有正文的请求需要将其设置在一个data键下
这是唯一详细解释它的答案。谢谢它真的有助于理解其他人。
2021-04-20 11:27:22
这个问题的最佳答案。谢谢你。
2021-04-21 11:27:22
如何使用参数而不是正文发送删除请求?
2021-04-23 11:27:22
@MaFiA,如果您想发送带有参数的删除请求。您可以简单地使用查询字符串将其放在 url 中
2021-04-30 11:27:22
你的回答让我希望在堆栈溢出时有一个 +2 upvote 功能。
2021-05-12 11:27:22

公理。删除就是传递一个URL和一个可选配置

axios.delete(url[, config])

可用于配置的字段可以包括标头

这使得 API 调用可以写为:

const headers = {
  'Authorization': 'Bearer paperboy'
}
const data = {
  foo: 'bar'
}

axios.delete('https://foo.svc/resource', {headers, data})
为我工作,我正在使用 React 和 Django
2021-05-02 11:27:22
从浏览器发出的请求表示不同。请参阅此 Stackblitz ( stackblitz.com/edit/react-gq1maa ) 以及浏览器网络选项卡中的请求 ( snag.gy/JrAMjD.jpg )。您需要确保在此处以正确的方式读取标头服务器端,或者请求没有被拦截和篡改。
2021-05-05 11:27:22
这对我不起作用......我有const headers = {'Authorization': ...}data = {'username': ...}最终axios.delete('http://...', {headers, data})但服务器无法访问标题......
2021-05-16 11:27:22

对于删除,您需要按照以下操作

axios.delete("/<your endpoint>", { data:<"payload object">})

它对我有用。