#c# #json #.net #asp.net-mvc #asp.net-core
Вопрос:
Я прошел несколько обучающих программ в сети, но все равно получил тот же результат. Документация Microsofts настолько глубока, учитывая, что все, что я хочу,-это, по сути, отправить одну переменную контроллеру.
Мой код на стороне клиента выглядит следующим образом:
var obj = { send: 'test' };
$.ajax({
url: '/Countries/GetVotes',
type: 'POST',
contentType: "application/json",
data: JSON.stringify(obj),
success: function (data) {
if (data === null) {
// TODO
} else {
console.log(data);
}
},
error: function (error) {
console.log(error);
}
});
Тогда контроллер будет выглядеть так:
[HttpPost]
public async Task<JsonResult> GetVotes(string send)
{
try
{
var votes = ctx.Candidates.Where(x => x.Country == send)
.OrderByDescending(x => x.Votes)
.ToList();
return Json(votes);
}
catch (Exception ex)
{
logger.Error(ex);
}
return Json("foo");
}
Все стандартные и используемые для работы в .NET framework 4.7.2, любой, кто занимался каким-либо MVC, был бы хорошо знаком с этим подходом.
Я принял решение попробовать использовать .net core 3.1. Попадаю во все правильные точки останова, проблема в том, что строка под названием «отправить» отправляется на мой контроллер как нулевая.
Кто — нибудь знает самый простой способ заставить это работать?
Комментарии:
1. У вас есть какие-нибудь ошибки?
2. ПРИВЕТ, нет, не вижу, чтобы в переменной контроллеров появлялся только нуль
Ответ №1:
То, что вы передаете, является объектом JSON
{ send: "test" }
То, что вы ожидаете в теле запроса в контроллере, — это просто строка. Вы можете попробовать создать объект запроса, представляющий структуру данных, которую вы ожидаете:
public class Request {
public string send { get; set; }
}
Затем вы можете обновить свой метод контроллера до
public async Task<JsonResult> GetVotes([FromBody]Request request)
И дальнейший доступ к свойству отправки через request.send.
Комментарии:
1. Идеальная и очень быстрая реакция, так просто. Почему каждый учебник так сложен, это намного проще понять, еще раз спасибо 🙂
Ответ №2:
вам не нужно вводить строку, когда вы уже отправляете строку. И удалите тип контента тоже. По умолчанию все было бы в порядке.
Так что попробуйте это
$.ajax({
url: '/Countries/GetVotes',
type: 'POST',
data: obj,
success: function (data) {
if (data === null) {
// TODO
} else {
console.log(data);
}
},
error: function (error) {
console.log(error);
}
});