前言
查询了一下关于 MVC 中的模型绑定,大部分都是关于如何使用的,以及模型绑定过程中的一些用法和概念,很少有关于模型绑定的内部机制实现的文章,本文就来讲解一下在 ASP.NET Core MVC 中模型绑定是如何实现的,以及它的一些其他用法。
模型绑定的用途
通常情况下,我们在使用 MVC 框架的时候不需要关注模型绑定的相关功能,因为它是集成到 MVC 框架内部的,当我们在浏览器访问一个地址的时候,无论是 GET 还是 POST 访问,在映射到 Action 的过程中 MVC 框架已经自动的进行了对象或者是路由参数的绑定,这其中就是使用的模型绑定。
在 ASP.NET Core MVC 中,模型绑定分为简单模型绑定和复杂模型绑定。简单的模型绑定比如直接从 Form 表单或者 URL 路由数据中获取信息,然后应用到Action方法的各个参数上,复杂模型绑定的话可能就不是简单的转换到参数的值上面了,可能中间还会涉及到一些数据类型转换,模型分解,参数校验等。
下面来看一下模型绑定的一个示例:
假设我们有一个ViewModel对象叫 Person,它的代码如下:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
在这个 ViewModel 对象中,都是使用的一些很简单的类型,那么我们的 Action 进行如下的定义:
public class PersonController
{
[HttpPost]
[Route("~api/person/add")]
public IActionResult CreatePerson(Person person)
{
return Ok(person);
}
}
在上面的代码中,我们可以向 http://localhost:5000/api/person/add 这个地址发送一个 POST 请求,Body 类型使用普通的 Form ,参数使用上面Person定义的 Name, Age。 在 Action 上添加断点,我们就可以看到person变量中的值,然后此 Action 会返回一个被 json 序列化后的结果对象。
这样一个过程,就是模型绑定在实际开发中的一个用途和用法。
是不是看起来很简单呢?但是在内部模型绑定子系统是比较复杂的,由很多部分组成。
模型绑定的一些用法
在 ASP.NET Core MVC 中,支持以下表单类型的模型绑定。
[FromHeader],[FromQuery],