Asp.net Core 2 API POST Los objetos son NULL?

Tengo una configuración .NET Core 2 API con algunas funciones de prueba. (Visual Studio 2017)

Utilizando el cartero, hago una publicación con los datos sin procesar para ese método, pero ¿el modelo está en blanco? ¿Por qué?

// 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; } } 

enter image description here

enter image description here

[FromBody incluir el atributo [FromBody ] en el modelo:

 [FromBody] MyTestModel model 

Ver la publicación de Andrew Lock para más información:

Para vincular JSON correctamente en ASP.NET Core, debe modificar su acción para incluir el atributo [FromBody] en el parámetro. Esto le indica al marco que use el encabezado de tipo de contenido de la solicitud para decidir cuál de los IInputFormatters configurados se usará para el enlace del modelo.

Como señaló @anserk en los comentarios, esto también requiere que el encabezado Content-Type se configure en application/json .

Para agregar más información a la respuesta aceptada:

Hay tres fonts desde las que los parámetros se enlazan automáticamente sin el uso de un atributo:

Valores de formulario: estos son valores de formulario que entran en la solicitud HTTP utilizando el método POST. (incluidas las solicitudes jQuery POST).

Valores de ruta: el conjunto de valores de ruta proporcionados por Enrutamiento

Cadenas de consulta: la parte de cadena de consulta del URI.

Tenga en cuenta que el Body NO es uno de ellos (aunque creo que debería ser).

Entonces, si tiene valores que deben estar vinculados al cuerpo, DEBE usar el atributo de enlace de atributo.

Esto me hizo tropezar ayer, ya que supuse que los parámetros del cuerpo se unirían automáticamente.

El segundo punto secundario es que solo un parámetro puede estar vinculado al Cuerpo.

Puede haber como máximo un parámetro por acción decorado con [FromBody]. El tiempo de ejecución ASP.NET Core MVC delega la responsabilidad de leer el flujo de solicitud al formateador. Una vez que se lee la secuencia de solicitud para un parámetro, generalmente no es posible volver a leer la secuencia de solicitud para vincular otros parámetros [Del Cuerpo].

Por lo tanto, si hay más de un parámetro que necesita, debe crear una clase de modelo para vincularlos:

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

Los documentos