javascript 将包含简单字符串的请求作为请求正文

shyt4zoc  于 2022-12-25  发布在  Java
关注(0)|答案(9)|浏览(129)

当我从浏览器执行下面的代码时,服务器给我400,并抱怨请求正文丢失。有人知道我如何传递一个简单的字符串,并将其作为请求正文发送吗?

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

如果我把内容 Package 在[]中,它就会通过。但是服务器接收到的是一个以[开头并以]结尾的字符串。这看起来很奇怪。
经过一番折腾,我发现下面的作品

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

但第一个不也应该起作用吗?

9cbw7uwe

9cbw7uwe1#

我通过覆盖默认的Content-Type解决了这个问题:

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

根据我的经验,默认的Content-Type对于字符串是application/x-www-form-urlencoded,对于对象(包括数组)是application/json

u5rb5r59

u5rb5r592#

这对我来说是有效的(从node 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));

日志:200
这是我的请求处理程序(我使用的是retify):

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

Content-Type标头在这里很重要。

8gsdolmq

8gsdolmq3#

我在发送纯文本时遇到了麻烦,发现需要用双引号将正文的值括起来:

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

我的webapi服务器方法签名如下:

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

ergxz8rk4#

您是否尝试过以下方法:

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

参考:http://codeheaven.io/how-to-use-axios-as-your-http-client/

bn31dyow

bn31dyow5#

第一个月
示例:

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

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

mm5n2pyu6#

简单地放入报头'Content-Type': 'application/json',发送的数据放入主体JSON.stringify(string)

siotufzp

siotufzp7#

另一个简单的解决方案是在给定代码中用大括号将content变量括起来,如下所示:

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

警告:但这不会将其作为字符串发送;它将把它 Package 在一个json主体中,如下所示:{content:“您好,世界”}

dbf7pr2w

dbf7pr2w8#

这对我很有效:

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();
       });
    })
  };
}
lzfw57am

lzfw57am9#

这对我很有效。

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'));

相关问题