Tidak dapat menerima data dalam metode Web API HttpPost dari posting React axios

Sep 25 2020

Metode Post API Web saya berfungsi dengan baik dengan Swagger, tetapi ketika saya mengirim permintaan posting dari Aplikasi React saya dengan axios, data [FromBody] adalah null. Berikut adalah metode API Web.

[HttpPost]
[Route("api/employee/addMany")]
public IHttpActionResult Post([FromBody] dynamic data)  //my axios request hit this method but data is always null. I have tried passing without stringifying
  {
   Employee[] employees=JObject.Parse(data);
   //doing some stuff with employees
   return Ok();
  }

Dan berikut adalah kode permintaan pos Axios


export function addEmployees(employees:Employee[]) {
  return axios.post(`api/employee/addMany`, { employees });
}

Dan di sini adalah interseptor permintaan, melakukan Pascalization dan Stringifying data Model Keys.

const pascalizeKeys = (obj:any):any => {
  if (Array.isArray(obj)) {
    return obj.map(v => pascalizeKeys(v));
  } else if (obj !== null && obj.constructor === Object) {
    return Object.keys(obj).reduce(
      (result, key) => ({
        ...result,
        [String(upperFirst(key))]: pascalizeKeys(obj[key]),
      }),
      {},
    );
  }
  return obj;
};

export function applyInterceptors(Axios:typeof axios){
  Axios.interceptors.request.use((request)=>{
    if(request.data){
      request.data = JSON.stringify(pascalizeKeys(request.data));
      return request;
    }
    return request;
  }
  )
}

Jawaban

1 Slim Sep 25 2020 at 08:35

Hal-hal untuk mencoba agar axios post bekerja:

  1. Setel tajuk
headers: {
          'content-type': 'application/json',
     }
  1. Coba lampirkan json Anda ke bidang dataatau paramspermintaan

  2. Jika Anda masih tidak bisa mendapatkan data Anda, kirimkan sebagai yang baru formDatadi bidang data

let formData = new FormData()

formdata.append('name', yourJson)

await axios({
  method: 'post',
  url: '/your/url',
  data: formData,
  headers: {
    'Content-Type': 'multipart/form-data',
  },
})

dan Anda harus mendapatkannya dengan permintaan Anda sekarang