<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題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
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        ASP.NET全棧開發教程之前后臺校驗結合詳解

        來源:懂視網 責編:小采 時間:2020-11-27 22:34:57
        文檔

        ASP.NET全棧開發教程之前后臺校驗結合詳解

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

        前言

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

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

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

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

        首先我們使用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; }
        
         }

        有了模型,要想驗證模型,肯定得有驗證器才行,于是我們在創建一個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表示該驗證器驗證的實體,在構造函數里通過this.RuleFor為指定的屬性設置驗證,在上述配置中為Person的Name和Age屬性都設置了非空,并且給出了相應的錯誤消息。

        現在實體有了,驗證器也有了,就差東風了。

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

         

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

        但在我們實際應用中不一定會像上述案例一樣一帆風順,也許我們的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位之間");
         }
         }

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

        當然你可以像這樣做

        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屬性比較比較多,在配置起來的時候重復工作量大大提高,并且人家AddressValidator已經完成配置了,你再來配置一遍,可以算是在浪費生命嗎?

        幸好,FluentValidation提供了一種為屬性設置驗證器的機制。

        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屬性上去了。

        初步認識和使用就先到這兒了。感謝各位看官。后續會持續更新,直到搭建完系統架構。

        總結

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

        文檔

        ASP.NET全棧開發教程之前后臺校驗結合詳解

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

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 在线观看免费污视频| 亚洲三级高清免费| 国产婷婷高清在线观看免费| 国产白丝无码免费视频| 西西人体大胆免费视频| 国产亚洲玖玖玖在线观看| 久久精品亚洲一区二区三区浴池| 免费国产真实迷j在线观看| 免费视频专区一国产盗摄| 免费无码作爱视频| 成人a毛片免费视频观看| 亚洲乱妇老熟女爽到高潮的片| 亚洲高清免费在线观看| 亚洲国产另类久久久精品小说| 免费一级肉体全黄毛片| 久久久久国色AV免费观看性色| 免费无码又爽又刺激高潮视频| 国产免费AV片在线观看播放| 久久综合亚洲色hezyo| 456亚洲人成影院在线观| 亚洲欧洲尹人香蕉综合| 亚洲小视频在线观看| 亚洲AV无码精品色午夜在线观看| 91麻豆精品国产自产在线观看亚洲| 国产大片91精品免费看3| 成人午夜大片免费7777| 一二三四在线观看免费高清中文在线观看 | 午夜网站免费版在线观看| 我的小后妈韩剧在线看免费高清版| 久久久久成人精品免费播放动漫| 国产永久免费高清在线| 国产在线观a免费观看| 成人自慰女黄网站免费大全| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 亚洲成?v人片天堂网无码| 国产一级一片免费播放| 拔擦拔擦8x华人免费久久| 国产片免费福利片永久| 国产在线观看www鲁啊鲁免费| 国产成人青青热久免费精品| 免费v片视频在线观看视频|