Сообщение от тела всегда пусто
У меня есть новый API, который я создаю с помощью ASP.NET Core, и я не могу получить данные, отправленные POST до конечной точки.
Вот как выглядит конечная точка:
[HttpPost]
[Route("StudentResults")]
public async Task<IActionResult> GetStudentResults([FromBody]List<string> userSocs, [FromBody]int collegeId)
{
var college = await _collegeService.GetCollegeByID(collegeId);
// var occupations = await _laborMarketService.GetOccupationProgramsBySocsAndCollege(userSocs, college);
return Ok();
}
И вот как выглядит моя полезная нагрузка, которую я посылаю через Postman:
{
"userSocs": [
"291123",
"291171",
"312021",
"291071",
"152031",
"533011"
],
"collegeId": 1
}
Я проверяю, что почтальон установлен как POST с приложением Content-Type application/json
. Что я делаю неправильно?
Ответы
Ответ 1
Вы всегда получаете null
, потому что вам нужно инкапсулировать все ваши переменные сообщения только в одном объекте. Вот так:
public class MyPostModel {
public List<string> userSocs {get; set;}
public int collegeId {get; set;}
}
а затем
public async Task<IActionResult> GetStudentResults([FromBody] MyPostModel postModel)
Ответ 2
Если модель пуста, проверьте:
1) Куда отправляются данные: тело, форма? и на основе этого добавить декоратор к действию. Например:
[HttpPost]
public JsonResult SaveX([FromBody]MyVM vm) { ... }
2) Проверьте ModelState: если он недействителен, vm не будет связан, поэтому он будет нулевым.
if (ModelState.IsValid) { ... }
Ответ 3
Я знаю, что это не имеет отношения к вашему делу, но я публикую здесь свой ответ. Это глупая ошибка, которую я сделал в своем коде. Я только что скопировал один из моих запросов Get и изменил его на запрос Post, и забыл украсить параметр с помощью [FromBody]
. Если у кого-то еще есть такая же проблема, пожалуйста, убедитесь, что вы [FromBody]
параметр с помощью [FromBody]
.
[HttpPost]
public IApiResponse Update([FromBody] User user) {
if (user == null) return new ApiBadRequestResponse(ModelState);
return _userService.Post(user) ? new ApiOkResponse(user) : new ApiResponse(500);
}
Ответ 4
Если вы хотите отправить две или более моделей, вы должны использовать этот пример, это работает для меня, удачи
[HttpPost]
public async Task<ActionResult> addUsuario([FromBody] Newtonsoft.Json.Linq.JObject datos)
{
Usuarios user = datos["usuario"].ToObject<Usuarios>();
Empresas empresa = datos["empresa"].ToObject<Empresas>();
return Json(await _srv.addUsuario(user, empresa));
}
Ответ 5
JSON.stringify(...) решил мои проблемы