.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一直在維護,是個不錯的可選組件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM