asp.net-core - ASP.NET 核心 : why must we use FromBodyAttribute to hydrate a parameter from a json payload during a POST request?

标签 asp.net-core csrf model-binding

在将现有的 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/

相关文章:

node.js - Cookie 中的 JWT 身份验证,具有无状态服务器且无服务器端渲染

Nginx X-Forwarded-host 引起的 Django CSRF 错误

c# - 使用哪种方法来模型绑定(bind)自定义类型

symfony - "csrf_provider"下无法识别的选项 "security.firewalls.form_login"

visual-studio-2015 - "The IIS Express settings are missing the App Url property"尝试配置 ASP.NET 5 项目时

c# - 如何在 ASP.NET Core 中提供正在写入的文件

c# - 在 Identity Server 4 中为 OpenID Connect 注册 IIdentityServerInteractionService

c# - ASP.NET MVC POST 中的模型绑定(bind) IEnumerable?

asp.net-mvc - ASP.NET MVC 4,如何在将 View 模型对象用作操作方法参数之前访问/修改 View 模型对象(并更改 View 和操作方法)?

c# - ASP NET Core Identity 中的 ai_user 和 ai_session cookie 是什么以及如何配置它?