Мне нужно отправить int на сервер С# (POST), а затем вернуть Json. На сервере (С#) всегда приходит ноль. В консоли браузера JS все в порядке (не ноль/ноль). Это ошибка http 500:
Не удалось загрузить ресурс: сервер ответил со статусом 500.
Код:
const CallNextTextFromChoice = (nextChoiceID) => {
axios.post('https://localhost:7252/Main/NextTextFromChoice', { nextChoiceID: nextChoiceID }, {
headers: {
'Content-Type': 'application/json'
}
})
.then(response => {
const data = response.data;
})
.catch(error => {
console.info(nextChoiceID);
console.error('Error:', error);
});
}
И код С#:
[HttpPost]
public IActionResult NextTextFromChoice(int nextChoiceID)
{
var nextText = _dataBaseController.UpdateAllInfoWithChoice(nextChoiceID);
return Json(nextText);
}
console.info(nextChoiceID) работает правильно и выводит правильное целое число.
Я попробовал использовать встроенное указание в данных C# Json (с атрибутом [FromBody]), но результат не изменился. Он всегда отображается как нуль (или ноль, если используется int). Сообщение просто не доходит
Поскольку вы устанавливаете Content-Type на application/json, попробуйте JSON.stringify({nextChoiceId: nextChoiceID }). Также укажите атрибут [FromBody].





Привязка между входящим запросом и методом работает не так, как вы ожидаете. Измените свой метод, чтобы он был более явным в отношении входящих параметров. Обратите внимание, что я определил record для инкапсуляции параметров вашего запроса.
[HttpPost]
public IActionResult NextTextFromChoice([FromBody] NextChoiceRequest request)
{
var nextText = _dataBaseController.UpdateAllInfoWithChoice(request.Id);
return Json(nextText);
}
public record NextChoiceRequest(int Id);
[FromBody] здесь не совсем необходим, поскольку другой привязки не происходит, а .NET достаточно умен, чтобы ее выполнить. Тем не менее, в любом случае может быть полезно быть явным.
Омг, спасибо! Это действительно помощь. Нужно прочитать о записи, еще раз спасибо!
проверьте логи вашего сервера