在将现有的 Web API 2 应用程序移植到 ASP.NET Core 时,我注意到现在我们需要将 FromBodyAttribute
应用于操作方法的参数(带有 json 负载的 POST 请求) :
[HttpPost]
public IActionResult([FromBody]MyComplexType parameter){ ... }
我已尝试搜索文档,但没有找到任何可以解释此决定背后的理由的内容。我确实找到了 post表示这样做是为了提高安全性(CSRF 场景)。
有人可以提供更多关于此的信息吗?
谢谢。
路易斯
最佳答案
默认的 ComplexTypeModelBinder
从来自请求的名称值对构建复杂对象图。这些名称值对来自各种 IValueProvider 实现。这可以表示查询字符串、表单值、标题或自定义源。 ASP.NET Core 的默认行为基于原始 ASP.NET MVC 行为,其中复杂对象不仅由请求正文中的数据组成,而且由请求的各个部分组成。这意味着您最终可能会从查询字符串和正文中获得对象中的值。
为了明确起见,我们在 ASP.NET Core MVC 中进行了调用,要求 [FromBody] 规避此行为并直接调用 IInputFormatter 管道。
PS:在 ASP.NET Core 2.1 中,使用 [ApiController] 属性装饰的 Controller 无需显式指定 [FromBody] 即可免费获得此功能。
关于asp.net-core - ASP.NET 核心 : why must we use FromBodyAttribute to hydrate a parameter from a json payload during a POST request?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51382243/