开源博客项目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#