.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一直在维护,是个不错的可选组件。
作者:屈鲁奇
出处:https://www.cnblogs.com/quluqi
联系:496195435@qq.com QQ:496195435
本文版权归作者和博客园共有,欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接。如有问题或建议,请多多赐教,非常感谢。