<二>Asp.netcore MVC 模型(Model)
一、模型绑定介绍
1、ASP.NET Core MVC 中的模型绑定将数据从 HTTP 请求映射到操作方法参数。参数既可以是简单类型, 例如字符串、 整数或浮点, 也可以是复杂类型。
- Form values: 通过 HTTP POST 请求发送的表单数据(包括 jQuery POST 请求)。
- Route values: 由 routing 提供的路由数据集。
- Query strings: URI 的查询字符串的 部分。
2、通过特性自定义模型绑定行为,当需要覆盖模型绑定的默认行为时, 特性是非常有用的工具。
- BindRequired]: 如果不发生绑定, 将添加模型状态错误。
- BindNever]: 告诉模型绑定器从不绑定到此参数。
- [FromHeader]、[From Query]、[FromRoute]、[FromForm]:使用这些来指定应用的确切绑定源
- FromServices]: 此特性使用依赖注入来绑定服务的参数。
- [FromBody]: 使用配置的格式化程序绑定请求主体中的数据,基于 请求的内容类型选择格式化器。
- [ModelBinder]: 用于 覆盖默认模型绑定器、 绑定源和名称。
二、模型验证
在应用程序将数据存储到数据库之前, 应用程序必须验证数据。 对于数据必须检查其是否存在潜在的安全隐患, 验证类型和大小是否正确并且符合所制定的规则。 尽管验证的实现可能是冗余且烦琐的, 但却是有必要的。 在MVC 中, 验证可以发生在客户端和服务器端。验证特性是配置模型验证的 种方法,因此在概念上类似于对数据库表中的字段进行验证。这包括诸如分配数据类型或必填字段的约束。
1、常见的内置验证属性:
- [CreditCard]: 验证属性是否为信用卡格式。
- [Compare]: 验证模型中的两个属性是否匹配。
- [EmailAddress]: 验证属性是否为电子邮件格式。
- [Phone]: 验证属性是否为电话号码格式。
- [Range]: 验证属性值是否在给定范围内。
- [Regular Expression]: 验证数据是否与指定的正则表达式匹配。
- [Required]: 必填的属性。
- [StringLength]: 验证字符串属性的最大长度。
- [Url]: 验证属性是否为网址格式。
[Required] [stringLength(1000)] public string Descrip七ion{ get;set; }
模型验证发生在每个控制器的操作被调用之前, 而检查 Mode!State.IsValid 和做出适当的反应是操作方法的职责。
2、自定义验证。实现自定义验证的方法非常简单,只需继承 VaLidationAttribute, 并且重写 lsValid 方法。例子,定义一个年份不超过1960的验证
[ClassicMovie (1960)] public DateTimeReleaseDate { get; set; }
public class ClassicMovieAttribute : ValidationAttribute, IClientModelValidator { private int _year; public ClassicMovieAttribute(int Year) { _year = Year; } protected override ValidationResult IsValid (object value, ValidationContext validationContext) { Movie movie = (Movie)validationContext.Objec七Instance; if (movie.Genre ==Genre.Classic && movie.ReleaseDate.Year > _year) { eturn new ValidationResult(GetErrorMessage()); } return ValidationResult.Success; } }