How can I add raw data body to an axios request?

前端 未结 8 1119
情歌与酒
情歌与酒 2020-12-30 19:44

I am trying to communicate with an API from my React application using Axios. I managed to get the GET request working, but now I need a POST one.

I need the body to

相关标签:
8条回答
  • 2020-12-30 19:50

    There many methods to send raw data with a post request. I personally like this one.

        const url = "your url"
        const data = {key: value}
        const headers = {
            "Content-Type": "application/json"
        }
        axios.post(url, data, headers)
    
    0 讨论(0)
  • 2020-12-30 19:57
    axios({
      method: 'post',     //put
      url: url,
      headers: {'Authorization': 'Bearer'+token}, 
      data: {
         firstName: 'Keshav', // This is the body part
         lastName: 'Gera'
      }
    });
    
    0 讨论(0)
  • 2020-12-30 19:58

    I got same problem. So I looked into the axios document. I found it. you can do it like this. this is easiest way. and super simple.

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

    You can use .then,.catch.

    0 讨论(0)
  • 2020-12-30 19:59

    The key is to use "Content-Type": "text/plain" as mentioned by @MadhuBhat.

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

    A thing to note if you use .NET is that a raw string to a controller will return 415 Unsupported Media Type. To get around this you need to encapsulate the raw string in hyphens like this and send it as "Content-Type": "application/json":

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

    C# Controller:

    [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

    You can also make a POST with query params if that helps:

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

    This will POST an empty body with the two query params:

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

    Source: https://stackoverflow.com/a/53501339/3850405

    0 讨论(0)
  • 2020-12-30 20:07

    The only solution I found that would work is the transformRequest property which allows you to override the extra data prep axios does before sending off the request.

        axios.request({
            method: 'post',
            url: 'http://foo.bar/',
            data: {},
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
            },
            transformRequest: [(data, header) => {
                data = 'grant_type=client_credentials'
                return data
            }]
        })
    
    0 讨论(0)
  • 2020-12-30 20:08

    You can use the below for passing the raw text.

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

    Just have your raw text within body or pass it directly within quotes as 'raw text to be sent' in place of body.

    The signature of the axios post is axios.post(url[, data[, config]]), so the data is where you pass your request body.

    0 讨论(0)
提交回复
热议问题