Невозможно получить данные в методе HttpPost веб-API из React axios post

#javascript #reactjs #asp.net-web-api #asp.net-web-api2

#javascript #reactjs #asp.net-web-api #asp.net-web-api2

Вопрос:

Мой метод Post веб-API отлично работает с Swagger, но когда я отправляю запрос post из моего приложения React с помощью axios, данные [FromBody] равны нулю. Вот метод веб-API.

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

  

И вот код запроса Axios post

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

И вот перехватчик запросов, выполняющий паскализацию ключей модели и упорядочивание данных.

 const pascalizeKeys = (obj:any):any => {
  if (Array.isArray(obj)) {
    return obj.map(v => pascalizeKeys(v));
  } else if (obj !== null amp;amp; 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;
  }
  )
}

  

Комментарии:

1. В последнее время у меня было довольно много проблем с axios и post, и это печально известная проблема, смотрите Здесь github.com/axios/axios/issues/1195 (также содержит несколько предложений относительно того, что вы могли бы попробовать). Можете ли вы сначала попробовать, установив для заголовков значение ‘content-type’: ‘application / json’, а затем попытавшись подключиться либо к данным, либо к полю параметров?

Ответ №1:

Что нужно сделать, чтобы заставить axios post работать:

  1. Установите заголовки
 headers: {
          'content-type': 'application/json',
     }
  
  1. Попробуйте прикрепить свой json либо data params к полю или запроса

  2. Если вам все еще не удается получить свои данные, отправьте их как новые formData в поле data вместо этого

 let formData = new FormData()

formdata.append('name', yourJson)

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

  

и вы должны получить его с вашим запросом сейчас

Комментарии:

1. наслаждайся, приятель 🙂 тебе 300