<二>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{ getset; }

模型验证发生在每个控制器的操作被调用之前, 而检查 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;
}
} 

 

posted @ 2022-05-15 19:00  许轩霖  阅读(177)  评论(0编辑  收藏  举报