开源博客项目Blog .NET中使用FluentValidation验证部分对象实例的属性值,本文学习FluentValidation模块的基本用法,后续再学习Blog .NET项目FluentValidation模块的用法。
   FluentValidation模块支持Linq 表达式,同时支持链式操作;既可以对简单类型的属性进行验证,也支持验证复杂类型属性;既能使用FluentValidation模块内置的验证类,也支持自定义验证方式。
   假设需要对类型A中的部分属性进行验证,定义验证类AValidator,继承自AbstractValidator<AppUser>,同时在AValidator的构造函数中调用RuleFor函数设置验证规则,使用lambda表达式指定要验证的属性,同时调用内置的验证函数进行属性验证,主要包括以下函数:
| 序号 | 函数名 | 用途 | 
|---|---|---|
| 1 | NotNull | 属性值不能为null | 
| 2 | NotEmpty | 属性值不能为null、empty或者空白,如果属性为集合,则集合必须有成员 | 
| 3 | NotEqual | 属性值不能等于指定值 | 
| 4 | Equal | 属性值必须等于指定值 | 
| 5 | Length | 字符串属性长度必须位于指定范围之内 | 
| 6 | MaximumLength | 字符串属性长度不能大于指定值 | 
| 7 | MinimumLength | 字符串属性长度不能小于指定值 | 
| 8 | LessThan | 属性值必须小于指定值 | 
| 9 | LessThanOrEqualTo | 属性值必须小于等于指定值 | 
| 10 | GreaterThan | 属性值必须大于指定值 | 
| 11 | GreaterThanOrEqualTo | 属性值必须大于等于指定值 | 
| 12 | Must | 自定义属性验证方式 | 
| 13 | Matches | 使用正则表达式验证属性值 | 
| 14 | EmailAddress | 属性值必须为电子邮箱格式 | 
| 15 | CreditCard | 属性值必须为信用卡格式 | 
| 16 | IsInEnum | 检查属性值是否为指定枚举类型中的值 | 
| 17 | IsEnumName | 检查字符串属性是否为指定枚举类型中的名词 | 
| 18 | Empty | 属性值必须为空,或者类型的默认值,或者如果属性为集合,则集合不包含成员 | 
| 19 | Null | 属性值须为null | 
| 20 | ExclusiveBetween | 属性值必须在指定的范围内 ,不包含边界值 | 
| 21 | InclusiveBetween | 属性值必须在指定的范围内,包含边界值 | 
| 22 | PrecisionScale | 检查decimal属性值的精度是否满足要求 | 
  新建Winform项目测试FluentValidation的基本用法,在Nuget包管理器中搜索并安装FluentValidation。
 
   定义用户信息类及其验证类,如下所示:
public class AppUser
{
    public string UserName { get; set; }
    public string Sex { get; set; }
    public int Age { get; set; }
    public string Email { get; set; }
}
public class AppUserValidator:AbstractValidator<AppUser>
{
    public AppUserValidator()
    {
        RuleFor(r => r.UserName).NotEmpty().WithMessage("姓名不能为空");
        RuleFor(r => r.Age).GreaterThan(10).WithMessage("年龄必须超过10岁");
        RuleFor(r => r.Email).EmailAddress();
    }
}
使用以下代码进行验证,验证结果如下图所示:
AppUser user = new AppUser();
user.UserName = txtName.Text;
user.Age=Convert.ToInt32(txtAge.Text);
user.Email = txtEmail.Text;
user.Sex = comboSex.Text;
AppUserValidator validationRules = new AppUserValidator();
FluentValidation.Results.ValidationResult result= validationRules.Validate(user);
if(!result.IsValid)
{
    MessageBox.Show(result.ToString());
}

参考文献:
 [1]https://docs.fluentvalidation.net/en/latest/index.html#



















