Axios本文とヘッダーを含む削除リクエスト?


116

ReactJSでプログラミングしているときにAxiosを使用していて、サーバーにDELETEリクエストを送信するふりをしています。

そのためには、ヘッダーが必要です。

headers: {
  'Authorization': ...
}

体はで構成されています

var payload = {
    "username": ..
}

私はインターウェブを検索してきましたが、DELETEメソッドには「param」が必要であり、「data」を受け入れないことがわかりました。

私はそれを次のように送信しようとしています:

axios.delete(URL, payload, header);

あるいは

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

しかし、何も機能していないようです...

ヘッダーと本文の両方を含むDELETEリクエストを送信することが可能かどうか(そうだと思います)、その方法を教えてもらえますか?

前もって感謝します!

回答:


143

それで、何度か試した後、私はそれが機能していることに気づきました。

注文順序従ってください。それ以外の場合は機能しません。

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

102

axiox.deleteリクエスト本文をサポートします。これは、urlとオプションのconfigの2つのパラメーターを受け入れます。を使用config.dataして、リクエストの本文とヘッダーを次のように設定できます。

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

こちらをご覧ください-https://github.com/axios/axios/issues/897


問題は、同じ削除リクエストで本文とヘッダーを送信したいということです
Asfourhundred 2018年

83

これは、axiosでさまざまなhttp動詞を送信するために必要な形式の簡単な要約です。

  • GET: 二つの方法

    • 最初の方法

      axios.get('/user?ID=12345')
        .then(function (response) {
          // Do something
        })
      
    • 2番目の方法

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

    上記の2つは同等です。params2番目の方法でキーワードを観察します。

  • POST そして PATCH

    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の賛成機能があったことを願っています。
イーライ-BD

これはそれを詳細に説明する唯一の答えです。本当に他の人を理解するのに役立ちました。
ジェフ

本文ではなくパラメータを使用して削除リクエストを送信するにはどうすればよいですか?
AjaySingh20年

この質問に対する最良の答え。ありがとうございました。
HartleySan

1
@MaFiA、パラメータを使用して削除リクエストを送信する場合。あなたは、単にクエリ文字列を使用してURLにそれを置くことができます
Van_Paitin

14

axios。deleteに、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 2018年

ブラウザから送信されるリクエストは異なります。このStackblitz(stackblitz.com/edit/react-gq1maa)と、ブラウザーのネットワークタブ(snag.gy/JrAMjD.jpg)のリクエストを参照してください。ここで、ヘッダーサーバー側を正しい方法で読み取っていること、またはリクエストが傍受されて改ざんされていないことを確認する必要があります。
Oluwafemi Sule 2018

6

私はそれを次のように解決したのと同じ問題を抱えていました:

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

5

実際にaxios.deleteは、リクエスト本文をサポートしています。
aURLとオプションの2つのパラメータを受け入れます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
おかげで、私はこれをnestJs HttpService削除メソッドで次のように使用しています:this.httpService.delete(apiUrl、{headers:headersRequest、data:deleteBody})
shanti 2010

4

削除の場合、次のようにする必要があります

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

それは私のために働いた。


2

いくつかのヘッダーを含むHTTPDELETEを送信するには、次のようにしますaxios

  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)の構文は注意が必要です。これは、2番目のパラメーターがHTTP本体であると想定される場合もあれば、ヘッダーを2番目のパラメーターとして渡す場合もあるためです。 。

ただし、HTTPボディなしでHTTP POSTリクエストを送信する必要があるとするundefinedと、2番目のパラメータとして渡す必要があります。

心の中で裸の構成オブジェクト(の定義に従うことをhttps://github.com/axios/axios#request-config)あなたはまだ経由でHTTP呼び出しでHTTPボディを渡すことができますdata呼び出すときにフィールドaxios.deleteがHTTPのために、 DELETE動詞は無視されます。

2番目のパラメーターがHTTPボディである場合と、configオブジェクト全体である場合との間のこの混乱は、axiosHTTPルールがどのように実装されているかによるものです。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; });
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.