如果在 ASP.NET Core 中使用 [FromBody] 属性,可能会遇到一些奇怪的行为,例如无法接收 POST 请求正文中的数据。解决方案是使用 [ApiController] 属性,如下所示:
[ApiController]
[Route("[controller]")]
public class MyController : ControllerBase
{
[HttpPost("create")]
public ActionResult Create([FromBody]MyModel model)
{
// perform some action with model
return Ok(model);
}
}
在这个示例中,我们添加了 [ApiController] 和 [Route] 属性。这会告诉 ASP.NET Core,我们想要自动处理正文中的数据,并将其绑定到方法的参数上。现在,我们就可以在 POST 请求中正常访问 MyModel 对象了。
需要注意的是,在使用 [ApiController] 属性时,我们不需要在代码中手动检查 ModelState.IsValid。ASP.NET Core 会在数据绑定后自动验证模型,并返回 400 响应码和验证错误的详细信息。