将[FromBody]属性应用于.net Core中的所有控制器操作

时间:2019-08-15 03:23:48

标签: asp.net-core .net-core asp.net-core-webapi modelbinders

具有一个简单的.NET Core API,您的模型以JSON形式发布在请求主体中,如何将[FromBody]属性应用于所有控制器方法?

[Route("api/simple")]
public class SimpleController : ControllerBase
{
    [HttpPost]
    public IActionResult Post([FromBody] MyRequest request)
    {
        return Ok();
    }
}

如果我删除[FromBody]属性,则所有模型属性都将为空。

1 个答案:

答案 0 :(得分:1)

如果您使用POST将模型Content-Type: application/json放置在体内,那么您 have to 告诉ModelBinder通过应用从身体读取模型[FromBody]属性。

但是将[FromBody]添加到所有API操作中会使您感到不舒服。

只需将[ApiController]应用于您的控制器,然后您就不再需要[FromBody]

[ApiController]的Microsoft Doc定义

  

指示使用一种类型和所有派生类型来提供HTTP API响应。

     

装饰有此属性的控制器具有旨在改善开发人员构建API体验的功能和行为。

因此,在ASP.NET Core 2.1及更高版本中,如果没有[FromBody],则无法使用

[Route("api/simple")]
[ApiController]
public class SimpleController : ControllerBase
{
    [HttpPost]
    public IActionResult Post(OrderRequest request)
    {
         return Ok();
    }
}