设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 站长学院 > Asp教程 > 正文

基于.NET的FluentValidation数据验证实现(4)

发布时间:2020-11-22 15:29 所属栏目:120 来源:网络整理
导读:public class CustomerValidator : AbstractValidatorCustomer{ public CustomerValidator() {When(t = !string.IsNullOrEmpty(t.Surname), () = { RuleFor(t = t.Name).NotEmpty();//其他验证规则 }); }} 通过在Wh

public class CustomerValidator : AbstractValidator<Customer> { public CustomerValidator() { When(t => !string.IsNullOrEmpty(t.Surname), () => { RuleFor(t => t.Name).NotEmpty();//其他验证规则 }); } }

通过在When方法后面追加一个Otherwise方法,可以执行不满足When中调整的验证规则,如下:

When(t => !string.IsNullOrEmpty(t.Surname), () => { RuleFor(t => t.Name).NotEmpty(); }).Otherwise(() => { RuleFor(t => t.Name).Equal("哈哈"); });

默认情况下,FluentValidation会将条件应用于对的同一调用中的所有先前的验证器RuleFor。比如下面这条代码,如果Surname不为空,则对Name进行非空和是否等于11的验证,否则不会对Name执行这两个验证:

RuleFor(t => t.Name).NotEmpty().Equal("11").When(t => !string.IsNullOrEmpty(t.Surname));

如果仅希望将条件应用于紧接条件之前的验证器,则必须明确参数ApplyConditionTo.CurrentValidator,如下,只有Equal受到When方法的限制,NotEmpty不管When是否为true都会执行的。

RuleFor(t => t.Name).NotEmpty().Equal("11").When(t => !string.IsNullOrEmpty(t.Surname), ApplyConditionTo.CurrentValidator);

设置级联模式

有两种联级模式:

Continue (默认设置)-始终调用规则定义中的所有验证器

Stop -验证程序失败后立即停止执行规则(仅在FluentValidation 9.1和更高版本中可用,在旧版本中,您可以改用StopOnFirstFailure)

通过如下代码,可以在NotNull验证不通过的时候就停止验证,不再执行NotEqual的验证。默认是验证不通过,也继续验证下去。

RuleFor(x => x.Surname).Cascade(CascadeMode.Stop).NotNull().NotEqual("foo");

设置严重性级别

默认情况下,如果这些规则失败,则严重性为“错误”。可以通过调用WithSeverity方法来更改。例如,如果我们希望将缺少的姓氏标识为警告而不是错误,则可以将上面的行修改为:

RuleFor(x => x.Surname).NotNull().WithSeverity(Severity.Warning);

在9.0及更高版本中,可以改用回调,这也使您可以访问正在验证的项目:

RuleFor(person => person.Surname).NotNull().WithSeverity(person => Severity.Warning);

定制验证器

之前我们都是使用内置的验证器,如Equal、NotNull等等。

我们也可以自己定义验证器,实现自定义验证器的最简单方法是使用Must方法,该方法在内部使用PredicateValidator。假设我们有以下课程:

public class Person { public IList<Pet> Pets {get;set;} = new List<Pet>(); }

为了确保我们的list属性包含少于10个项目,我们可以这样做:

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读