Объекты POST для Asp.net Core 2 являются NULL?

У меня есть настройка .net Core 2 API с некоторой тестовой функцией. (Visual Studio 2017)

Используя почтальон, я делаю сообщение с необработанными данными для этого метода, но модель просто пустая? Зачем?

// POST api/Product/test [HttpPost] [Route("test")] public object test(MyTestModel model) { try { var a = model.SomeTestParam; return Ok("Yey"); } catch (Exception ex) { return BadRequest(new { message = ex.Message }); } } public class MyTestModel { public int SomeTestParam { get; set; } } 

введите описание изображения здесь

введите описание изображения здесь

Вам нужно включить [FromBody ] в модель:

 [FromBody] MyTestModel model 

См. Сообщение Эндрю Блока для получения дополнительной информации:

Чтобы правильно привязать JSON в ядре ASP.NET, вы должны изменить свое действие, чтобы включить атрибут [FromBody] в параметр. Это сообщает структуре использовать заголовок типа содержимого запроса, чтобы решить, какой из настроенных IInputFormatters использовать для привязки к модели.

Как отметил @anserk в комментариях, для этого также требуется, чтобы заголовок Content-Type был установлен в application/json .

Чтобы добавить дополнительную информацию к принятому ответу:

Существует три источника, из которых параметры связаны автоматически без использования атрибута:

Значения форм: это значения формы, которые входят в HTTP-запрос с использованием метода POST. (включая запросы POST JQuery).

Значения маршрута: набор значений маршрута, предоставляемых маршрутизацией

Строки запроса: часть строки запроса в URI.

Обратите внимание, что Body НЕ является одним из них (хотя я думаю, что это должно быть).

Поэтому, если у вас есть значения, которые необходимо связать с телом, вы ДОЛЖНЫ использовать атрибут привязки атрибута.

Вчера это подстегнуло меня, поскольку я предположил, что параметры из Тела будут связаны автоматически.

Вторая второстепенная точка состоит в том, что только один параметр может быть привязан к Телу.

В каждом действии может быть не более одного параметра, декорированного [FromBody]. Операционная среда ASP.NET Core MVC делегирует ответственность за чтение streamа запросов в форматтер. Как только stream запроса считывается для параметра, как правило, невозможно снова прочитать stream запросов для привязки других параметров [FromBody].

Таким образом, если вам нужно больше одного параметра, вам необходимо создать class Model для их привязки:

 public class InputModel{ public string FirstName{get;set;} public string LastName{get;set;} } [HttpPost] public IActionResult test([FromBody]InputModel model)... 

Документы

  • Пожалуйста, объясните, почему я могу создать экземпляр интерфейса «Приложение» в Excel VSTO
  • Как решить ошибку LNK2019: нерешенный внешний символ - функция?
  • Запросить блокировку нескольких неудачных логинов в течение определенного периода времени
  • Как связать List с элементом управления DataGridView?
  • Почему rand () дает одну и ту же последовательность чисел при каждом запуске?
  • ошибка LNK2005, уже определена?
  • Как я могу прочитать строку ввода неизвестной длины?
  • Копирование значений из одного объекта в другой
  • Как использовать httpwebrequest для вывода изображения с сайта на локальный файл
  • SetWindowsHookEx в C #
  • Как обнаружить щелчки мыши?
  • Давайте будем гением компьютера.