加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

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

发布时间:2020-11-23 01:31:09 所属栏目:Asp教程 来源:网络整理
导读:副标题#e# FluentValidation 是一个基于 .NET 开发的验证框架,开源免费,而且优雅,支持链式操作,易于理解,功能完善,还是可与 MVC5、WebApi2 和 ASP.NET CORE 深度集成,组件内提供十几种常用验证器,可扩展性好,支持自定义验证器,支持本地化多语言。

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个项目,我们可以这样做:

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读