c# webapi 移除[Frombody]

  1. 增加一个Contrller,命名为BaseController, 并继承Controller
  2. 在BaseController类上增加属性[ApiController]

原理

mvc控制器。一般继承的是 Controller (Controller 里面包含视图),对 action 方法参数 模型绑定的时候,参数的推断来源默认是 从表单中获取 相当于默认有 [FromFrom] 这个特性加在参数旁边

webapi,继承 ControllerBase(里面没有关于视图的方法),webapi 一般加个特性 [ApiController] ,如果加了这个特性,对 action 方法参数 模型绑定的时候,参数的推断来源默认是 从主体中获取 相当于默认有 [FromBody] 这个特性加在参数旁边

如果没有 [ApiController] 属性或诸如 [FromQuery] 的绑定源属性,ASP.NET Core 运行时会尝试使用复杂对象模型绑定器。 复杂对象模型绑定器按已定义顺序从值提供程序拉取数据。

| 特性 | 绑定源 |

[FromBody] 请求正文
[FromForm] 请求正文中的表单数据
[FromHeader] 请求标头
[FromQuery] 请求查询字符串参数
[FromRoute] 当前请求中的路由数据
[FromServices] 作为操作参数插入的请求服务

[ApiController] 属性将推理规则应用于操作参数的默认数据源。 借助这些规则,无需通过将属性应用于操作参数来手动识别绑定源。 绑定源推理规则的行为如下:

[FromBody] 针对复杂类型参数进行推断。 [FromBody] 不适用于具有特殊含义的任何复杂的内置类型,如 IFormCollection 和 CancellationToken。 绑定源推理代码将忽略这些特殊类型。
[FromForm] 针对 IFormFile 和 IFormFileCollection 类型的操作参数进行推断。 该特性不针对任何简单类型或用户定义类型进行推断。
[FromRoute] 针对与路由模板中的参数相匹配的任何操作参数名称进行推断。 当多个路由与一个操作参数匹配时,任何路由值都视为 [FromRoute]。
[FromQuery] 针对任何其他操作参数进行推断。

官方文档

留待后查,同时方便他人
联系我:renhanlinbsl@163.com
原文地址:https://www.cnblogs.com/ives/p/15158674.html