东莞免费建站公司,石河子网站制作,沈阳网站建设咨询,媒体发布公司FluentValidation模块支持调用When和Unless函数设置验证规则的执行条件#xff0c;其中when函数设置的是满足条件时执行#xff0c;而Unless函数则是满足条件时不执行#xff0c;这两个函数的使用示例如及效果如下所示#xff1a; public AppInfoalidator() {RuleFor(x… FluentValidation模块支持调用When和Unless函数设置验证规则的执行条件其中when函数设置的是满足条件时执行而Unless函数则是满足条件时不执行这两个函数的使用示例如及效果如下所示 public AppInfoalidator() {RuleFor(xx.AppName).NotEmpty();RuleForEach(x x.Roles).NotEmpty().WithMessage(角色属性第{CollectionIndex}个集合元素不能为空).MinimumLength(3).WithMessage(角色属性第{CollectionIndex}个集合元素长度不能小于3).When (xx.Roles.Count4);RuleForEach(x x.Users).ChildRules(r {r.RuleFor(r r.UserName).NotEmpty().MinimumLength(5).WithMessage(用户属性第{CollectionIndex}个集合元素长度不能小于5).MaximumLength(10).NotEqual(test).WithMessage(用户属性第{CollectionIndex}个集合元素值不能等于test).Unless(xx.Sex男);});}默认情况下When和Unless函数应用于整个验证链中的所有验证函数如果只想在满足条件时仅影响紧邻When和Unless函数前的验证函数则需在When和Unless函数中设置第二个参数为ApplyConditionTo.CurrentValidator这样的话加入验证链中有4个验证函数前3个每次都会调用最后一个验证函数会根据条件调用。使用时可以根据实际需要在需要加调用条件的验证函数后追加When或Unless函数。 如果是在相同条件下对多个属性进行验证则可直接调用When或Unless函数并将对多个属性的验证规则封装成函数作为输入参数同时FluentValidation模块还提供Otherwise函数当When或Unless函数条件不满足时可以调用Otherwise函数中封装的验证规则进行验证。When或Unless函数再加上Otherwise函数类似于代码中的if else的逻辑。其使用示例及效果如下所示
public AppInfoalidator()
{RuleFor(xx.AppName).NotEmpty();When(x x.AppState 0, () {RuleForEach(x x.Roles).NotEmpty().WithMessage(角色属性第{CollectionIndex}个集合元素不能为空).MinimumLength(3).WithMessage(角色属性第{CollectionIndex}个集合元素长度不能小于3);}).Otherwise(() {RuleForEach(x x.Users).ChildRules(r {r.RuleFor(r r.UserName).NotEmpty().MinimumLength(5).WithMessage(用户属性第{CollectionIndex}个集合元素长度不能小于5).MaximumLength(10).NotEqual(test).WithMessage(用户属性第{CollectionIndex}个集合元素值不能等于test);});});
}如果自定义验证类中对多个属性进行验证但在某场景下仅需针对单个属性进行验证FluentValidation模块支持在调用验证类的Validate函数时通过输入参数指定需验证的属性忽略其它属性使用示例及效果如下所示
//自定义验证类的构造函数中定义规则
public AppInfoalidator()
{RuleFor(xx.AppName).NotEmpty();RuleForEach(x x.Roles).NotEmpty().WithMessage(角色属性第{CollectionIndex}个集合元素不能为空).MinimumLength(3).WithMessage(角色属性第{CollectionIndex}个集合元素长度不能小于3);RuleForEach(x x.Users).ChildRules(r {r.RuleFor(r r.UserName).NotEmpty().MinimumLength(5).WithMessage(用户属性第{CollectionIndex}个集合元素长度不能小于5).MaximumLength(10).NotEqual(test).WithMessage(用户属性第{CollectionIndex}个集合元素值不能等于test);});
}//调用验证类时指定需验证的属性AppInfoalidator appValidatornew AppInfoalidator();FluentValidation.Results.ValidationResult result appValidator.Validate(app, options {options.IncludeProperties(x x.Roles);});FluentValidation模块支持在自定义验证类的构造函数中分组验证规则未分组的规则默认在default组中。调用验证类验证时如果未指定验证组则仅执行未分组的验证规则支持在Validate函数的输入参数中指定单个或多个规则分组如果要执行所有规则则分组名称使用通配符*或者直接调用IncludeAllRuleSets函数。规则分组的使用示例及效果如下所示
//自定义验证类的构造函数中定义规则组
public AppInfoalidator()
{RuleFor(xx.AppName).NotEmpty();RuleSet(RoleCheck, () {RuleForEach(x x.Roles).NotEmpty().WithMessage(角色属性第{CollectionIndex}个集合元素不能为空).MinimumLength(3).WithMessage(角色属性第{CollectionIndex}个集合元素长度不能小于3);});RuleSet(UserCheck, () {RuleForEach(x x.Users).ChildRules(r {r.RuleFor(r r.UserName).NotEmpty().MinimumLength(5).WithMessage(用户属性第{CollectionIndex}个集合元素长度不能小于5).MaximumLength(10).NotEqual(test).WithMessage(用户属性第{CollectionIndex}个集合元素值不能等于test);});});
}//调用验证类时指定规则组
//1调用default和RoleCheck规则组AppInfoalidator appValidatornew AppInfoalidator();FluentValidation.Results.ValidationResult result appValidator.Validate(app,options{options.IncludeRuleSets(default, RoleCheck);});//2) 调用UserCheck规则组AppInfoalidator appValidatornew AppInfoalidator();FluentValidation.Results.ValidationResult result appValidator.Validate(app,options{options.IncludeRuleSets(UserCheck);//options.IncludeRuleSets(*)也适用}); //3调用所有规则AppInfoalidator appValidatornew AppInfoalidator();FluentValidation.Results.ValidationResult result appValidator.Validate(app,options{options.IncludeAllRuleSets();});参考文献 [1]https://docs.fluentvalidation.net/en/latest/start.html