#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 работать:
- Установите заголовки
headers: {
'content-type': 'application/json',
}
-
Попробуйте прикрепить свой json либо
data
params
к полю или запроса -
Если вам все еще не удается получить свои данные, отправьте их как новые
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