跟着官网学ASP.NET Core 6.0之请求参数模型绑定
这一节,我们继续跟着官网来学习一下模型绑定,什么是模型绑定呢?我理解为将HTTP请求到控制器的请求参数映射为.NET里面的一个对象
。接下来,我们就来实践实践
一般情况,我们的请求数据是通过这几种方式传递给服务端的,就是官网所说的源
- URL地址
- 路由
- Body
- 表单
- 请求头
- 上传文件
前面几个几种都有对应的方式,这文件上传的方式较为特殊一点,需要用IFormFile
或IEnumerable<IFormFile>
来接收并绑定。在开始之前,我先新建一个ModelBindController
的控制器,这样才好演示,接下来便进入正题,其实,在ASP.NET Core 6.0
有6中常用的From
来接收不同源的参数,这里我们先学习五种:
- [FromQuery] - 从查询字符串中获取值。
- [FromRoute] - 从路由数据中获取值。
- [FromForm] - 从发布的表单域中获取值。
- [FromBody] - 从请求正文中获取值。
- [FromHeader] - 从 HTTP 标头中获取值。
FromQuery
FromQuery
特性便是用来接收URL里面的参数值,根据URL里面的键值对来映射,先看一个简单的例子
1 | [Route("api/[controller]")] |
此时,我们通过GET方式来访问api/ModelBind?name=6666
,便会在日志中打印出接受到的值
其实,默认情况下,我们也不需要去手动指定这种简单是值映射类型,类似上面的这种情况,其实我们不需要指定[FromQuery]
,直接定义一个和参数一致的变量名便可接收到参数值。在参数较多时候,我们便需要使用一个类来接收,这里,我新建一个名为ModelBindVo
类
1 | public class ModelBindVo |
这时就需要使用FromQuery
来指定参数来源
1 | [HttpGet] |
此时在通过api/ModelBind?name=6666&age=90
来访问,便能将参数自动绑定到ModelBindVo
的对象上,
FromRoute
FromRoute
是从路由中获取值,一般情况下,我们会这样使用路由
1 | [HttpGet("{name}")] |
这时候,我们访问api/ModelBind/999
时,name
便能接受到参数值,如果我们想路由里面多传几个值怎么办呢?很简单,我们需要这么干
1 | [Route("{Name}/{Age}")] |
这时候,我们通过api/ModelBind/6666/90
来访问,便能取到对应的值啦。
FromBody
FromBody
其实就是接受Body里面比较复杂的参数,我们还是用前面的对象,只不过需要把参数放在Body
中传递
1 | [HttpPost] |
这里,传递是JSON数据格式,默认情况下,ASP.NET Core是处理的JSON
数据格式,如果想要使用其他类型,如xml
,则需要通过制定Program.cs
指定输入类型,然后在对应的方法上通过Consumes
来执行Content-Type
类型。
这里只是简单是实践了三种源对请求参数的处理,其他几种的处理方式其实差不多,无非就是通过请求头或者表单提交方式来传值,其他的就是特殊数据类型,如
文件上传
,这个后面实践的时候再来继续学习,下一节,我们继续跟着官网学习模型验证
跟着官网学ASP.NET Core 6.0之请求参数模型绑定