.NET Core中的验证组件FluentValidation的实战分享
今天有人問(wèn)我能不能出一篇FluentValidation的教程,剛好今天在實(shí)現(xiàn)我們的.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS的修改密碼部分的功能中有用到FluentValidation,所以就以修改用戶密碼為實(shí)例來(lái)為大家進(jìn)行一下ASP.NET Core中的驗(yàn)證組件FluentValidation的實(shí)戰(zhàn)分享,希望能對(duì)大家有所幫助!由于本文以.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS中的項(xiàng)目為例,因此此篇文章會(huì)收錄到系列教程的目錄中。
本篇文章已經(jīng)收納入《.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第一章 入門(mén)篇-開(kāi)篇及總體規(guī)劃》另附上.NET Core實(shí)戰(zhàn)項(xiàng)目交流群:637326624 有興趣的朋友可以共同交流技術(shù)經(jīng)驗(yàn)。
作者:依樂(lè)祝
原文地址:https://www.cnblogs.com/yilezhu/p/10397393.html
寫(xiě)在前面
開(kāi)始之前還是有必要為大家科普一下FluentValidation的概念,它是一個(gè)非常流行的用來(lái)構(gòu)建強(qiáng)類(lèi)型驗(yàn)證規(guī)則的.NET庫(kù)。而且它對(duì)ASP.NETCore支持十分友好,可以很方便的進(jìn)行集成使用,集成后我們可以很方便的對(duì)數(shù)據(jù)模型進(jìn)行強(qiáng)驗(yàn)證。
為什么要使用它呢?
因?yàn)樗銐蚝?jiǎn)單,而且功能強(qiáng)大,可以很方便的來(lái)為我們建立起強(qiáng)大的實(shí)體驗(yàn)證功能!那么怎么使用它呢?下面我們就通過(guò)修改密碼的實(shí)例來(lái)進(jìn)行講解!
FluentValidation使用
開(kāi)始使用之前我們先構(gòu)思一下密碼修改需要進(jìn)行的驗(yàn)證規(guī)則:
密碼強(qiáng)度驗(yàn)證
舊密碼是否跟數(shù)據(jù)庫(kù)中的一樣
新密碼不能跟舊密碼一樣
重復(fù)密碼需要跟新密碼一樣
當(dāng)前頁(yè)面用戶必須登錄,用戶ID必須大于0
好了,假設(shè)我們需要實(shí)現(xiàn)上述的功能驗(yàn)證,怎么來(lái)進(jìn)行實(shí)現(xiàn)呢?當(dāng)然我們可以通過(guò).net core中的DataAnnoations 進(jìn)行實(shí)現(xiàn),但是今天我們要使用FluentValidation來(lái)實(shí)現(xiàn)一番。下面是具體步驟!
使用
首先當(dāng)然是添加FluentValidation.AspNetCore?Nuget包了:
Install-Package FluentValidation.AspNetCore安裝后,需要在應(yīng)用程序的Startup中的ConfigureServices方法中調(diào)用AddFluentValidation內(nèi)的擴(kuò)展方法。(這里需要using FluentValidation.AspNetCore),需要注意的是這個(gè)擴(kuò)展方法必須在調(diào)用AddMvc?之后進(jìn)行調(diào)用。如下所示:
注意:
AddFluentValidation方法必須在AddMvc之后進(jìn)行調(diào)用
我在AddFluentValidation中加入了兩個(gè)配置,都有注釋你應(yīng)該能看懂。
下面根據(jù)我們步驟開(kāi)始之前的分析創(chuàng)建如下的修改密碼的視圖模型
為這個(gè)視圖模型創(chuàng)建一個(gè)校驗(yàn)類(lèi),用來(lái)添加我們上面列出來(lái)的校驗(yàn)規(guī)則,如下所示:
注:上述代碼應(yīng)該很好理解吧,為了防止有初學(xué)者,所以這里再?gòu)U話一下:
為每個(gè)需要驗(yàn)證的實(shí)體創(chuàng)建一個(gè)這樣的類(lèi),如我們要驗(yàn)證的實(shí)體是ChangePasswordModel?因此我們創(chuàng)建一個(gè)ChangePasswordModelValidation
驗(yàn)證類(lèi)需要繼承AbstractValidator<T>?如:ChangePasswordModelValidation : AbstractValidator
在構(gòu)造函數(shù)中寫(xiě)驗(yàn)證規(guī)則
RuleFor()是為當(dāng)前實(shí)體的某一個(gè)屬性添加驗(yàn)證,如:RuleFor(x => x.Id).NotNull().GreaterThan(0)?就是驗(yàn)證這個(gè)實(shí)體的Id?這個(gè)字段不能為空,而且必須大于0.后面的WithMessage?就是如果前面校驗(yàn)失敗就返回的錯(cuò)誤信息
如果要添加自定義的驗(yàn)證,如:判斷新密碼是否與舊密碼一致,這里就先定義這個(gè)校驗(yàn)方法,如:NewNotEqualsOld?這個(gè)方法我們自定義的,然后再RuleFor().Must(NewNotEqualsOld) 即可應(yīng)用
在我們的修改密碼功能提交的時(shí)候應(yīng)用我們的驗(yàn)證,只需要正常的使用即可,如:
如上所示,該怎么用還怎么用,然后再繼續(xù)模型校驗(yàn)的時(shí)候會(huì)自動(dòng)應(yīng)用我們的規(guī)則。如果我們定義的規(guī)則校驗(yàn)失敗的話,這時(shí)候ModelState.IsValid?會(huì)返回false?這時(shí)候我們就可以把錯(cuò)誤信息通過(guò)我們?cè)贐aseController?中自定義的ToErrorString(ModelState,"||");?方法打印出來(lái)。
功能驗(yàn)證
這里我們先把前臺(tái)的驗(yàn)證規(guī)則都給去掉,然后我們剛開(kāi)始設(shè)計(jì)的幾個(gè)規(guī)則的校驗(yàn)吧!
密碼強(qiáng)度驗(yàn)證
這里我們簡(jiǎn)單的繼續(xù)密碼長(zhǎng)度的校驗(yàn),如長(zhǎng)度滿足在:4-32位 ,我們對(duì)應(yīng)的FluentValidation?的驗(yàn)證規(guī)則為RuleFor(x => x.OldPassword).NotEmpty().Length(4, 32)?這里還進(jìn)行了非空的校驗(yàn)。如下圖所示:
舊密碼是否跟數(shù)據(jù)庫(kù)中的一樣
這個(gè)校驗(yàn)我是在密碼提交后進(jìn)行的校驗(yàn),沒(méi)有放在FluentValidation中,所以這塊只展示測(cè)試效果圖吧
新密碼不能跟舊密碼一樣
這部分我們對(duì)應(yīng)的FluentValidation中的驗(yàn)證規(guī)則是:新增自定義方法,然后調(diào)用RuleFor().Must(NewNotEqualsOld).WithMessage("新密碼不能跟舊密碼一樣")
效果如下所示:
重復(fù)密碼需要跟新密碼一樣
這部分我們對(duì)應(yīng)的FluentValidation中的驗(yàn)證規(guī)則是:新增自定義方法,然后調(diào)用RuleFor().Must(ReEqualsNew).WithMessage("重復(fù)密碼必須跟新密碼一樣")
效果如下所示:
當(dāng)前頁(yè)面用戶必須登錄,用戶ID必須大于0
這部分我們對(duì)應(yīng)的FluentValidation中的驗(yàn)證規(guī)則是:RuleFor()..NotNull().GreaterThan(0)
效果如下所示:
源碼地址
這個(gè)系列教程的源碼我會(huì)開(kāi)放在GitHub以及碼云上,有興趣的朋友可以下載查看!覺(jué)得不錯(cuò)的歡迎Star
GitHub:https://github.com/yilezhu/Czar.Cms
碼云:https://gitee.com/yilezhu/Czar.Cms
如果你覺(jué)得這個(gè)系列對(duì)您有所幫助的話,歡迎以各種方式進(jìn)行贊助,當(dāng)然給個(gè)Star支持下也是可以滴!另外一種最簡(jiǎn)單粗暴的方式就是下面這種直接關(guān)注我們的公眾號(hào)了:
總結(jié)
本篇文章,我通過(guò)用戶密碼修改的實(shí)例來(lái)為大家詳細(xì)講解了FluentValidation的使用以及注意事項(xiàng),希望能對(duì)大家有所幫助。因?yàn)楸酒恼率褂梦覀兿盗薪坛讨械膶?shí)例,所以本篇文章會(huì)收錄至系列教程的目錄中!本篇文章用了兩個(gè)番茄時(shí)間才完成。
.NET社區(qū)新聞,深度好文,歡迎訪問(wèn)公眾號(hào)文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的.NET Core中的验证组件FluentValidation的实战分享的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 响应式编程知多少 | Rx.NET 了解
- 下一篇: 如何为ASP.NET Core设置客户端