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


118

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

为此,我需要标题:

headers: {
  'Authorization': ...
}

身体是由

var payload = {
    "username": ..
}

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

我一直试图像这样发送它:

axios.delete(URL, payload, header);

甚至

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

但是似乎没有任何作用...

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

先感谢您!

Answers:


144

因此,经过多次尝试,我发现它可以正常工作。

请遵循订单顺序,这一点非常重要,否则将无法正常工作

axios.delete(URL, {
  headers: {
    Authorization: authorizationToken
  },
  data: {
    source: source
  }
});

1
您好,您能解释一下为什么答案有效吗?
佛朗哥·吉尔

102

axiox.delete支持请求正文。它接受两个参数:URL和可选配置。您可以使用以下config.data方法设置请求正文和标头:

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

在这里看到-https: //github.com/axios/axios/issues/897


我要在相同的删除请求中发送正文和标头
Asfourhundred

83

这是使用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密钥下

11
您的回答让我希望堆栈溢出有+2 upvote功能。
eli-bd

这是详细解释它的唯一答案。谢谢,它确实有助于理解其他人。
杰夫

如何使用参数而不是正文发送删除请求?
Ajay Singh

这个问题的最佳答案。谢谢。
哈特利

1
@MaFiA,如果要发送带参数的删除请求。您可以使用查询字符串将其简单地放在网址中
Van_Paitin

14

轴距。删除就是传递一个URL和一个可选配置

axios.delete(url [,config])

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

这样就可以将API调用编写为:

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

axios.delete('https://foo.svc/resource', {headers, data})

这不工作对我来说...我有const headers = {'Authorization': ...}data = {'username': ...}结尾了axios.delete('http://...', {headers, data}),但是服务器无法访问头...
Asfourhundred

从浏览器发出的请求表示不同。请参阅此Stackblitz(stackblitz.com/edit/react-gq1maa),以及浏览器网络选项卡中的请求(snag.gy/JrAMjD.jpg)。您需要确保在此处以正确的方式读取标头服务器端,或者确保该请求不会被拦截和篡改。
Oluwafemi Sule

6

我遇到了同样的问题,就这样解决了:

axios.delete(url, {data:{username:"user", password:"pass"}, headers:{Authorization: "token"}})

5

实际上,axios.delete支持请求正文。
它接受两个参数:aURL和optional config。那是...

axios.delete(url: string, config?: AxiosRequestConfig | undefined)

您可以执行以下操作来设置删除请求的响应正文:

let config = { 
    headers: {
        Authorization: authToken
    },
    data: { //! Take note of the `data` keyword. This is the request body.
        key: value,
        ... //! more `key: value` pairs as desired.
    } 
}

axios.delete(url, config)

我希望这可以帮助别人!


1
this.httpService.delete(apiUrl,{deleteBody标题:::headersRequest,数据})谢谢,我在我的nestJs HttpService的删除方法,使用这种
桑迪


2

通过axios我发送带有某些标头的HTTP DELETE :

  const deleteUrl = "http//foo.bar.baz";
  const httpReqHeaders = {
    'Authorization': token,
    'Content-Type': 'application/json'
  };
  // check the structure here: https://github.com/axios/axios#request-config
  const axiosConfigObject = {headers: httpReqHeaders}; 

  axios.delete(deleteUrl, axiosConfigObject);

axios不同的HTTP动词(GET,POST,PUT,DELETE)的语法很棘手,因为有时第二个参数应该是HTTP正文,而在其他时候(可能不需要),您只是将标头作为第二个参数传递。

但是,假设您需要发送不带HTTP正文的HTTP POST请求,那么您需要将其undefined作为第二个参数传递。

切记,根据配置对象(https://github.com/axios/axios#request-config)的定义,您仍然可以在调用时通过data字段在HTTP调用中传递HTTP正文axios.delete,但是对于HTTP DELETE动词将被忽略。

有时,第二个参数是HTTP正文,而其他时候,整个config对象axios所造成的困惑是由于HTTP规则的实现方式所致。有时不需要HTTP主体即可将HTTP调用视为有效。


0

我遇到了同样的问题...通过创建自定义axios实例解决了该问题。并使用它发出经过身份验证的删除请求。

const token = localStorage.getItem('token');
const request = axios.create({
        headers: {
            Authorization: token
        }
    });

await request.delete('<your route>, { data: { <your data> }});

0

我找到了一种可行的方法:

axios
      .delete(URL, {
        params: { id: 'IDDataBase'},
        headers: {
          token: 'TOKEN',
        },
      }) 
      .then(function (response) {
        
      })
      .catch(function (error) {
        console.log(error);
      });

我也希望这项工作对您也有用。


0

我尝试了以上所有不适用于我的方法。我最终只是使用PUT(在这里找到灵感)),只是更改了服务器端逻辑以对该URL调用执行删除。(django rest框架功能覆盖)。

例如

.put(`http://127.0.0.1:8006/api/updatetoken/20`, bayst)
      .then((response) => response.data)
      .catch((error) => { throw error.response.data; });
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.