• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

    ASP.NET全棧開發(fā)教程之前后臺校驗結(jié)合詳解

    來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 22:34:57
    文檔

    ASP.NET全棧開發(fā)教程之前后臺校驗結(jié)合詳解

    ASP.NET全棧開發(fā)教程之前后臺校驗結(jié)合詳解:前言 在Web系統(tǒng)開發(fā)時,往往會有存在大量的交互操作,交互就必須校驗數(shù)據(jù)的準(zhǔn)確性啊,且不說一個字段可能存在多種校驗,若一個表單提交有10個字段難道我們要對這10個字段分別寫代碼去校驗嗎?如果是這樣,那每一個表單都要單獨(dú)去寫一份校驗豈不是太痛苦了?
    推薦度:
    導(dǎo)讀ASP.NET全棧開發(fā)教程之前后臺校驗結(jié)合詳解:前言 在Web系統(tǒng)開發(fā)時,往往會有存在大量的交互操作,交互就必須校驗數(shù)據(jù)的準(zhǔn)確性啊,且不說一個字段可能存在多種校驗,若一個表單提交有10個字段難道我們要對這10個字段分別寫代碼去校驗嗎?如果是這樣,那每一個表單都要單獨(dú)去寫一份校驗豈不是太痛苦了?

    前言

    在Web系統(tǒng)開發(fā)時,往往會有存在大量的交互操作,交互就必須校驗數(shù)據(jù)的準(zhǔn)確性啊,且不說一個字段可能存在多種校驗,若一個表單提交有10個字段難道我們要對這10個字段分別寫代碼去校驗嗎?如果是這樣,那每一個表單都要單獨(dú)去寫一份校驗豈不是太痛苦了?

    為了解決這個問題,聰明的程序員們開始了“偷懶”!

    今天我們介紹一位在.NET平臺下偷懶的——“FluentValidation”,正如其名,流利的驗證,他將我們的驗證開發(fā)工作變得流利甚至優(yōu)美了起來。

    接下來我們就來看看如何使用它吧。

    首先我們使用nuget安裝 FluentValidation

    Nuget安裝命令:Install-Package FluentValidation -Version 7.6.104

    由于FluentValidation的驗證是基于模型的,所以,我們先來建立一個Person

    public class Person
     {
     /// <summary>
     /// 姓名
     /// </summary>
     public string Name { get; set; }
     /// <summary>
     /// 年齡
     /// </summary>
     public int Age { get; set; }
     /// <summary>
     /// 性別
     /// </summary>
     public bool Sex { get; set; }
    
     }

    有了模型,要想驗證模型,肯定得有驗證器才行,于是我們在創(chuàng)建一個Person的驗證器

    public class PersonValidator : AbstractValidator<Person>
     {
     public PersonValidator()
     {
     this.RuleFor(p => p.Name)
     .NotEmpty()
     .WithMessage("名字不能為空");
     this.RuleFor(p => p.Age)
     .NotEmpty()
     .WithMessage("年齡不能為空!!");
     }
     }

    驗證器必須繼承自AbstractValidator<T> ,泛型T表示該驗證器驗證的實(shí)體,在構(gòu)造函數(shù)里通過this.RuleFor為指定的屬性設(shè)置驗證,在上述配置中為Person的Name和Age屬性都設(shè)置了非空,并且給出了相應(yīng)的錯誤消息。

    現(xiàn)在實(shí)體有了,驗證器也有了,就差東風(fēng)了。

    class Program
     {
     static void Main(string[] args)
     {
     Server(new Person { });
    
     Console.ReadKey(true);
     }
    
     private static void Server(Person model)
     {
     var validator = new PersonValidator();
    
     ValidationResult result = validator.Validate(model);
     if (!result.IsValid)
     {
     foreach (var failure in result.Errors)
     {
     //失敗的屬性名稱,如錯誤信息
     Console.WriteLine("Property " + failure.PropertyName + " failed validation. Error was: " + failure.ErrorMessage);
     }
     }
     Console.WriteLine("驗證完成!!");
     }
     }

    在Server方法中需要一個參數(shù)Person,Person是個對象,里面有3個屬性Name、Age、Sex,在Server內(nèi)部我們創(chuàng)建了一個Person驗證器對象,用它來驗證我們的參數(shù)model,  驗證后會返回一個驗證結(jié)果。這個結(jié)果有2個重要的參數(shù),第一是IsValid,驗證通過的時候返回True,第二個是Errors,他里面存放的是所有驗證失敗的信息,在驗證失敗的時候通過遍歷Errors即可獲取到所有錯誤信息,如上所示通過錯誤信息的PropertyName就能知道是哪個對象出錯了,而ErrorMessage自然就對應(yīng)這個Property所出錯內(nèi)容的WithMessage了。下面是運(yùn)行結(jié)果

     

    至此,我們能夠使用基本驗證了。

    但在我們實(shí)際應(yīng)用中不一定會像上述案例一樣一帆風(fēng)順,也許我們的Person里會有一個Address屬性,他的類型不是一個String,而是一個對象Address,如下所示

    public class Person
     {
     /// <summary>
     /// 姓名
     /// </summary>
     public string Name { get; set; }
     /// <summary>
     /// 年齡
     /// </summary>
     public int Age { get; set; }
     /// <summary>
     /// 性別
     /// </summary>
     public bool Sex { get; set; }
    
     /// <summary>
     /// 地址
     /// </summary>
     public Address Address { get; set; }
     }
    public class Address
     {
     /// <summary>
     /// 家庭地址
     /// </summary>
     public string Home { get; set; }
    
     /// <summary>
     /// 家庭電話
     /// </summary>
     public string Phone { get; set; }
     }

    假如Address也有一個驗證器

    public class AddressValidator : AbstractValidator<Address>
     {
     public AddressValidator()
     {
     this.RuleFor(m => m.Home)
     .NotEmpty()
     .WithMessage("家庭住址不能為空");
    
     this.RuleFor(m => m.Phone)
     .Length(11, 12)
     .WithMessage("電話必須是11-12位之間");
     }
     }

    現(xiàn)在需求變了,在Person實(shí)體的要求里不僅要求Name、Age不能為空,并且還要求Address下的Home和Phone滿足AddressValidator的要求,這可怎么辦呢?

    當(dāng)然你可以像這樣做

    public class PersonValidator : AbstractValidator<Person>
     {
     public PersonValidator()
     {
     this.RuleFor(p => p.Name)
     .NotEmpty()
     .WithMessage("名字不能為空");
     this.RuleFor(p => p.Age)
     .NotEmpty()
     .WithMessage("年齡不能為空!!");
    
     this.RuleFor(p => p.Address.Home)
     .MinimumLength(5)
     .WithMessage("家庭住址最短長度為5");
    
     }
     }

    通過Person.Address去給每一個屬性配置校驗,這并不是不能完成,但如果Address屬性比較比較多,在配置起來的時候重復(fù)工作量大大提高,并且人家AddressValidator已經(jīng)完成配置了,你再來配置一遍,可以算是在浪費(fèi)生命嗎?

    幸好,F(xiàn)luentValidation提供了一種為屬性設(shè)置驗證器的機(jī)制。

    public class PersonValidator : AbstractValidator<Person>
     {
     public PersonValidator()
     {
     this.RuleFor(p => p.Name)
     .NotEmpty()
     .WithMessage("名字不能為空");
     this.RuleFor(p => p.Age)
     .NotEmpty()
     .WithMessage("年齡不能為空!!");
    
     this.RuleFor(p => p.Address)
     .NotNull()
     .WithMessage("地址不能為空")
     .SetValidator(new AddressValidator());
    
     }
     }

    通過這樣我們就將Address下的Home和Phome的驗證追加到Person的Address屬性上去了。

    初步認(rèn)識和使用就先到這兒了。感謝各位看官。后續(xù)會持續(xù)更新,直到搭建完系統(tǒng)架構(gòu)。

    總結(jié)

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    ASP.NET全棧開發(fā)教程之前后臺校驗結(jié)合詳解

    ASP.NET全棧開發(fā)教程之前后臺校驗結(jié)合詳解:前言 在Web系統(tǒng)開發(fā)時,往往會有存在大量的交互操作,交互就必須校驗數(shù)據(jù)的準(zhǔn)確性啊,且不說一個字段可能存在多種校驗,若一個表單提交有10個字段難道我們要對這10個字段分別寫代碼去校驗嗎?如果是這樣,那每一個表單都要單獨(dú)去寫一份校驗豈不是太痛苦了?
    推薦度:
    標(biāo)簽: 驗證 校驗 入門教程
    • 熱門焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 99香蕉国产精品偷在线观看| 久久精品国产亚洲AV香蕉| 亚洲国产精品碰碰| 四虎影永久在线观看精品| 日韩精品区一区二区三VR| 国产在线国偷精品免费看| 国产精品免费精品自在线观看| 亚欧无码精品无码有性视频 | 国产精品视频第一页| 午夜不卡久久精品无码免费| 欧美国产成人精品一区二区三区| 99热日韩这里只有精品| 精品国产欧美另类一区| 国产精品污WWW在线观看| 亚洲AV成人精品网站在线播放| 青春草无码精品视频在线观| 国产乱人伦偷精品视频免观看| 一区二区三区精品| 麻豆精品成人免费国产片| jiucao在线观看精品| 国内精品人妻无码久久久影院| 少妇人妻偷人精品无码视频新浪| 一本一本久久a久久精品综合麻豆| 毛片a精品**国产| 精品水蜜桃久久久久久久| 国产午夜精品理论片免费观看| 免费视频精品一区二区三区| 华人亚洲欧美精品国产| 国产精品国产三级专区第1集| 国产成人精品精品欧美| 99精品免费视品| 国产成人精品免费视频大| 99久久精品毛片免费播放| 久久国产精品-久久精品| 中文字幕精品一区二区日本| Xx性欧美肥妇精品久久久久久| 成人国内精品久久久久影院VR| 国产成人无码精品久久久免费| 国产99久久久国产精品~~牛 | 精品人妻中文字幕有码在线 | 久久精品国产只有精品66|