.netcore3.1——应用验证组件FluentValidation

POST或者GET到服务端的数据是必须进行有效性校验的!数据校验也是重要的业务逻辑,让数据可信!

.NET中内置了验证组件(System.ComponentModel.DataAnnotations),可以简单的以特性方式实现,也是最常用的。

FluentValidation是个开源项目,Github(https://github.com/FluentValidation/FluentValidation),它让我们多了一种可选性,至于用哪种方式就看个人或团队习惯。

.netcore3.1中使用FluentValidation可以简单按以下步骤实现:

1、Nuget引用程序包:

 2、Startup文件ConfigureServices方法的设置:

1             services.AddControllersWithViews()
2             .AddFluentValidation(config =>//添加FluentValidation验证
3             {
4                 //程序集方式添加验证
5                 config.RegisterValidatorsFromAssemblyContaining(typeof(Validation.LoginModelValidation));
6                 //是否与MvcValidation共存,设置为false后将不再执行特性方式的验证
7                 config.RunDefaultMvcValidationAfterFluentValidationExecutes = false;
8             });

3、创建验证规则(格式比较固定其中LoginModel为被校验模型):

 1     public class LoginModelValidation : AbstractValidator<LoginModel>
 2     {
 3         public LoginModelValidation()
 4         {
 5             this.CascadeMode = CascadeMode.StopOnFirstFailure;
 6             this.RuleFor(o => o.UserName)
 7                 .NotEmpty().WithMessage("用户名不能为空")
 8                 .Length(4, 32).WithMessage("用户名长度校验失败");
 9 
10             this.RuleFor(o => o.Password)
11                 .NotEmpty().WithMessage("用户密码不能为空")
12                 .Length(4, 8).WithMessage("用户密码长度校验失败");
13 
14             //子对象校验
15             //RuleFor(o => o.Detail)
16             //    .NotNull().WithMessage("明细对象不能为空")
17             //    .SetValidator(t => new LoginModelDetailValidation());
18         }
19     }

官方提供了很多验证规则,我们可以直接github下载源码查看,另外还可以自定义规则。

4、使用方法:

在mvc中可以直接使用内置模型校验,FluentValidation会处理好ModelState,兼容原有程序写法,如

1             if (!ModelState.IsValid)
2             {
3                 return View("Index", model);
4             }

还可以使用FluentValidation提供的校验方式,也是比较通用的方式:

1             //代码校验方式
2             Validation.LoginModelValidation validationRules = new Validation.LoginModelValidation();
3             var validResult = validationRules.Validate(model);
4             if (!validResult.IsValid)
5             {
6                 validResult.AddToModelState(ModelState, string.Empty);
7                 return View("Index", model);
8             }

 

总结

FluentValidation以集中管理化方式来处理规则,语法简单易懂,逻辑清晰,可扩展性好,让程序的后期运维也比较方便,而且github一直在维护,是个不错的可选组件。

 

posted @ 2020-04-17 12:10  屈鲁奇  阅读(803)  评论(0编辑  收藏  举报