Solución:
NOTA: Si está utilizando aspnet core 3.0, la solución se puede encontrar aquí. Para otras versiones, sigue leyendo.
Debe marcar su parámetro como proveniente del cuerpo con el FromBody
atributo como este:
[HttpPost]
[Route("test1")]
[AllowAnonymous]
public IActionResult Test([FromBody] Class1 data)
{
return Ok();
}
Debes asegurarte de que estás usando application/json
como su tipo de contenido de Postman:
Resultando en:
Asegúrese de que los establecedores de su propiedad también sean públicos:
public class Person
{
public String Name;
public Int32 Age;
}
Yo también estaba luchando con esto, y pensé que compartiría un elemento que era necesario para mí y no en la respuesta aceptada, necesitaba agregar {get; set;} a cada atributo en mi clase como tal:
public class LogString{
public string val {get; set;}
public string data {get; set;}
}
El resto fue igual:
[HttpPost]
public void Post([FromBody] LogString message)
{
Console.WriteLine(message.val);
}
Después de agregar que comenzó a funcionar.
Yo tengo un ASP.Net Core 3.1 aplicación y para mí, ninguna de estas soluciones funcionó. Perdí algunos pelos (y horas de trabajo) hasta que encontré la documentación https://docs.microsoft.com/en-us/aspnet/core/web-api/jsonpatch?view=aspnetcore-3.1
En breve :
- Instala el Microsoft.AspNetCore.Mvc.NewtonsoftJson Paquete NuGet.
-
Actualice el método Startup.ConfigureServices del proyecto para llamar AddNewtonsoftJson. Por ejemplo:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages()
.AddNewtonsoftJson();//this is important
}
Eso es todo ! No necesito el [FromBody] atributo.
Si no funciona, verifique que las propiedades de su modelo tengan definidores (por ejemplo public string Message { get; set; }
). No olvides al colocador.