与ASP.NET Core中的FromBody混淆

J.P*_*J.P 11 c# asp.net-core-mvc asp.net-core asp.net-core-webapi angular

我有以下WEB API方法,并有一个带Angular的SPA模板:

[HttpPost]
public IActionResult Post([FromBody]MyViewModel model)
Run Code Online (Sandbox Code Playgroud)

我想,基于这个主题,没有必要在[FromBody]这里使用,因为我想从消息体中读取值,所以不需要覆盖默认行为,但是,如果我不使用[FromBody],那么模型来自Angular的是null.我真的很困惑,我为什么要使用[FromBody],因为我使用了默认行为?

Rob*_*Rob 25

对于任何看到此问题的 .net core 3 - 您需要将 [ApiController] 添加到扩展 ControllerBase 的控制器。[FromBody] 仅在您使用 MVC 控制器时才需要。

这会导致身体以您期望的方式自动处理。

ApiController 属性的 Microsoft 文档


小智 11

您链接的问题是指web-api.您正在使用已重写的core-mvc将以前的mvc和web-api版本的管道合并到一个Controller类中.

发布json(如同x-www-form-urlencoded)时,[FromBody]需要该属性指示ModelBinder使用内容类型标头来确定IInputFormatter用于读取请求的内容.

有关在core-mvc中绑定到json的模型的详细说明,请参阅ASP.NET Core中的模型绑定JSON POST.