天天看點

.netcore3.1——應用驗證元件FluentValidation

POST或者GET到服務端的資料是必須進行有效性校驗的!資料校驗也是重要的業務邏輯,讓資料可信!

.NET中内置了驗證元件(System.ComponentModel.DataAnnotations),可以簡單的以特性方式實作,也是最常用的。

FluentValidation是個開源項目,Github(https://github.com/FluentValidation/FluentValidation),它讓我們多了一種可選性,至于用哪種方式就看個人或團隊習慣。

.netcore3.1中使用FluentValidation可以簡單按以下步驟實作:

1、Nuget引用程式包:

.netcore3.1——應用驗證元件FluentValidation
.netcore3.1——應用驗證元件FluentValidation
 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

聯系:[email protected] QQ:496195435

本文版權歸作者和部落格園共有,歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接。如有問題或建議,請多多賜教,非常感謝。

繼續閱讀