web-dev-qa-db-fra.com

Mettre la requête avec une simple chaîne en tant que corps de la requête

Lorsque j'exécute le code suivant à partir de mon navigateur, le serveur m'en donne 400 et se plaint de l'absence du corps de la demande. Quelqu'un a-t-il un indice sur la manière dont je peux passer une chaîne simple et l'envoyer comme corps de la demande?

 let content = 'Hello world' 
 axios.put(url, content).then(response => {
    resolve(response.data.content)
  }, response => {
    this.handleEditError(response)
  })

Si j'emballe le contenu dans [], il passe à travers. Mais alors le serveur le reçoit comme une chaîne commençant par [et se terminant par]. Ce qui semble étrange.

Après avoir bricolé, j'ai découvert que les œuvres suivantes

  let req = {
    url,
    method: 'PUT',
    data: content
  }
  axios(req).then(response => {
    resolve(response.data.content)
  }, response => {
    this.handleEditError(response)
  })

Mais le premier ne devrait-il pas fonctionner aussi?

14
user672009

J'avais du mal à envoyer du texte brut et j'ai constaté que je devais entourer la valeur du corps de guillemets:

const request = axios.put(url, "\"" + values.guid + "\"", {
    headers: {
        "Accept": "application/json",
        "Content-type": "application/json",
        "Authorization": "Bearer " + sessionStorage.getItem('jwt')
    }
})

La signature de ma méthode de serveur webapi est la suivante:

public IActionResult UpdateModelGuid([FromRoute] string guid, [FromBody] string newGuid)
9
Dranyar

Cela fonctionne pour moi (code appelé du noeud js repl):

const axios = require("axios");

axios
    .put(
        "http://localhost:4000/api/token", 
        "mytoken", 
        {headers: {"Content-Type": "text/plain"}}
    )
    .then(r => console.log(r.status))
    .catch(e => console.log(e));

Journaux: 200

Et voici mon gestionnaire de requêtes (j'utilise restify):

function handleToken(req, res) {
    if(typeof req.body === "string" && req.body.length > 3) {
        res.send(200);
    } else {
        res.send(400);
    }
}

L'en-tête Content-Type est important ici.

8
kzg

Avez-vous essayé ce qui suit:

axios.post('/save', { firstName: 'Marlon', lastName: 'Bernardes' })
    .then(function(response){
        console.log('saved successfully')
});

Référence: http://codeheaven.io/how-to-use-axios-as-your-http-client/

6
Dimo

J'ai résolu ce problème en remplaçant le type de contenu par défaut:

const config = { headers: {'Content-Type': 'application/json'} };
axios.put(url, content, config).then(response => {
    ...
});

Sur la base de l'expérience m, Conent-Type par défaut est application/x-www-form-urlencoded pour les chaînes et application/json pour les objets (y compris les tableaux). Votre serveur attend probablement JSON.

5
nagy.zsolt.hun

axios.put(url,{body},{headers:{}})

exemple:

const body = {title: "what!"}
const api = {
  apikey: "safhjsdflajksdfh",
  Authorization: "Basic bwejdkfhasjk"
}

axios.put('https://api.xxx.net/xx', body, {headers: api})
2
Max Ma

Cela a fonctionné pour moi:

export function modalSave(name,id){
  console.log('modalChanges action ' + name+id);  

  return {
    type: 'EDIT',
    payload: new Promise((resolve, reject) => {
      const value = {
        Name: name,
        ID: id,
      } 

      axios({
        method: 'put',
        url: 'http://localhost:53203/api/values',
        data: value,
        config: { headers: {'Content-Type': 'multipart/form-data' }}
      })
       .then(function (response) {
         if (response.status === 200) {
           console.log("Update Success");
           resolve();
         }
       })
       .catch(function (response) {
         console.log(response);
         resolve();
       });
    })
  };
}
0
Dayan

cela a fonctionné pour moi.

let content = 'Hello world';

static apicall(content) {
return axios({
  url: `url`,
  method: "put",
  data: content
 });
}

apicall()
.then((response) => {
   console.log("success",response.data)
}
.error( () => console.log('error'));
0
Vishnu