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

Moh*_*hin 1 modelbinders .net-core asp.net-core asp.net-core-webapi

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

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

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

Moh*_*hin 5

如果您POST的模型位于体内,Content-Type: application/json那么您必须通过应用告诉ModelBinder从体内读取模型[FromBody]

但是添加[FromBody]到所有 API 操作会让您感觉很糟糕。

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

微软文档定义[ApiController]

指示类型和所有派生类型用于提供 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();
    }
}
Run Code Online (Sandbox Code Playgroud)