Объекты 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)... 

Документы

  • Обнаружение событий вставки / удаления USB в Windows с использованием C ++
  • OpenGL - Как создать независимую прозрачность заказа?
  • Блокировки повторного входа в C #
  • Является ли оператор экспоненты в C #?
  • Пароль Защитите SQLite DB. Является ли это возможным?
  • Множественное определение встроенных функций при связывании статических библиотек
  • Метод classа и переменная с тем же именем, ошибка компиляции в C ++ не в Java?
  • String.Equals () не работает по назначению
  • Использование .Net 4.5 Функция Async для программирования сокетов
  • Почему strchr принимает int для char, который будет найден?
  • Для обновления требуется действительный UpdateCommand при передаче коллекции DataRow с измененными строками
  • Давайте будем гением компьютера.