在将现有的Web API 2应用程序移植到ASP.NET Core时,我注意到现在需要将应用于FromBodyAttribute
操作方法的参数(带有JSON有效负载的POST请求):
[HttpPost] public IActionResult([FromBody]MyComplexType parameter){ ... }
我尝试搜索文档,但没有找到任何能解释此决定背后原因的信息。我确实找到了一条帖子,指出这样做是为了提高安全性(CSRF方案)。
有人可以提供更多有关此的信息吗?
谢谢。
路易斯
默认ComplexTypeModelBinder
值是根据来自请求的名称值对构建一个复杂的对象图。这些名称值对来自各种IValueProvider实现。可以表示查询字符串,表单值,标题或自定义源。ASP.NET Core的默认行为基于原始的ASP.NET MVC行为,其中,复杂对象不仅由请求正文中的数据组成,还由请求的各个部分组成。这意味着您最终可能会从查询字符串以及正文中获得对象中的值。
为了明确起见,我们在ASP.NET Core MVC中进行了调用,要求[FromBody]规避此行为,然后直接调用IInputFormatter管道。
PS:在装饰有[ApiController]属性的ASP.NET Core 2.1控制器中,无需显式指定[FromBody]即可免费获得此控件。