如何将原始数据主体添加到 axios 请求?

IT技术 javascript c# reactjs post axios
2021-04-04 00:35:16

我正在尝试使用 Axios 与我的 React 应用程序中的 API 进行通信。我设法让 GET 请求工作,但现在我需要一个 POST 请求。

我需要正文是原始文本,因为我将在其中编写 MDX 查询。这是我提出请求的部分:

axios.post(baseUrl + 'applications/' + appName + '/dataexport/plantypes' + plan,
    {
      headers: { 'Authorization': 'Basic xxxxxxxxxxxxxxxxxxx',
      'Content-Type' : 'text/plain' }
    }).then((response) => {
      this.setState({data:response.data});
      console.log(this.state.data);
    });

在这里我添加了内容类型部分。但是我怎样才能添加身体部分呢?

谢谢你。

编辑:

这是工作邮递员请求的屏幕截图 邮递员工作要求

6个回答

使用直接axiosAPI怎么样?

axios({
  method: 'post',
  url: baseUrl + 'applications/' + appName + '/dataexport/plantypes' + plan,
  headers: {}, 
  data: {
    foo: 'bar', // This is the body part
  }
});

来源:axios api

我们如何获取数据:从反应形式?例如:用户提供输入,然后我们可以使用输入的数据生成json主体
2021-05-27 00:35:16
这是否意味着数据部分作为 JSON 发送?
2021-06-21 00:35:16

您可以使用以下内容传递原始文本。

axios.post(
        baseUrl + 'applications/' + appName + '/dataexport/plantypes' + plan, 
        body, 
        {
            headers: { 
                'Authorization': 'Basic xxxxxxxxxxxxxxxxxxx',
                'Content-Type' : 'text/plain' 
            }
        }
).then(response => {
    this.setState({data:response.data});
    console.log(this.state.data);
});

只需将原始文本放在其中body或直接在引号中传递,'raw text to be sent'而不是body.

axios 帖子的签名是axios.post(url[, data[, config]]),因此这data是您传递请求正文的地方。

这就是你如何在 axios 中执行 curl -d 'some data to send' 而没有表单字段名称
2021-05-25 00:35:16
@KarimTaha 你有没有试过添加整个文本来代替body
2021-05-26 00:35:16
我不知道为什么,但这不起作用。你能看看我添加的截图吗?也许我错过了什么。
2021-05-27 00:35:16

关键是使用"Content-Type": "text/plain"@MadhuBhat 提到的。

axios.post(path, code, { headers: { "Content-Type": "text/plain" } }).then(response => {
    console.log(response);
});

如果您使用.NET需要注意的一点是控制器的原始字符串将返回415 Unsupported Media Type. 要解决这个问题,您需要像这样将原始字符串封装在连字符中并将其发送为"Content-Type": "application/json"

axios.post(path, "\"" + code + "\"", { headers: { "Content-Type": "application/json" } }).then(response => {
    console.log(response);
});

C# 控制器:

[HttpPost]
public async Task<ActionResult<string>> Post([FromBody] string code)
{
    return Ok(code);
}

https://weblog.west-wind.com/posts/2017/sep/14/accepting-raw-request-body-content-in-aspnet-core-api-controllers

如果有帮助,您还可以使用查询参数进行 POST:

.post(`/mails/users/sendVerificationMail`, null, { params: {
  mail,
  firstname
}})
.then(response => response.status)
.catch(err => console.warn(err));

这将发布一个带有两个查询参数的空主体:

POST http://localhost:8000/api/mails/users/sendVerificationMail?mail=lol%40lol.com&firstname=myFirstName

来源:https : //stackoverflow.com/a/53501339/3850405

您可以使用邮递员生成代码。看看这张图片。按照步骤 1 和步骤 2 操作。

在此处输入图片说明

如果您的端点只接受使用 Body(在邮递员中)发送的数据,您应该发送 FormData。

var formdata = new FormData();
//add three variable to form
formdata.append("imdbid", "1234");
formdata.append("token", "d48a3c54948b4c4edd9207151ff1c7a3");
formdata.append("rate", "4");
      
let res = await axios.post("/api/save_rate", dataform);

我遇到了同样的问题。所以我查看了 axios 文档。我找到了。你可以这样做。这是最简单的方法。而且超级简单。

https://www.npmjs.com/package/axios#using-applicationx-www-form-urlencoded-format

var params = new URLSearchParams();
params.append('param1', 'value1');
params.append('param2', 'value2');
axios.post('/foo', params);

您可以使用 .then,.catch。