如何對使用者輸入的資料進行驗證
阿新 • • 發佈:2022-03-25
為了保證使用者輸入系統的資料是有效的,同時也是為了避免程式出現不可預期的問題,保證應用程式能夠安全的執行,所以對輸入的資料進行驗證是非常有必要的。
剛開始學程式碼的時候,我是這樣進行資料校驗的
看上去是不是很醜陋...,表單資料多的時候往往能寫上幾百上千行的if判斷語句。並且每個需要儲存更新資料的地方都需要編寫這樣的驗證程式碼...
後來,稍微學會點了偷懶的技巧,把資料的驗證放到了物件裡,這樣客戶端每次只需要呼叫驗證方法就可以對資料進行驗證。
public IEnumerable<Tuple<bool, string>> Validate() { if (string.IsNullOrEmpty(Name)) { yield return new Tuple<bool, string>(false, "客戶姓名不允許為空!"); } if (Age > 0 && Age <= 120) { yield return new Tuple<bool, string>(false, "年齡的有效範圍是1~120歲!"); } if (string.IsNullOrEmpty(Phone)) { yield return new Tuple<bool, string>(false, "電話號碼不允許為空!"); } //... 以下還有一百行程式碼 } // 客戶端呼叫程式碼 foreach (var item in custom.Validate()) { if (!item.Item1) { Console.WriteLine(item.Item2); return; } }
再後來,看到了別人通過給物件成員新增校驗特性,在提交資料時通過反射獲取物件成員宣告的特性進行校驗,進一步簡化了程式碼。你可以自己去定義資料驗證的相關驗證特性類和驗證處理的程式碼,但作為一個懶人,我通過使用.NET提供的System.ComponentModel.DataAnnotations.dll庫中的校驗特性和驗證處理類就可以很簡單的實現資料的校驗。如果你之前寫過ASP.NET MVC相關的程式碼,應該對他比較熟悉
public class Custom { [Required] public string Name { get; set; } [Required] [Range(0, 2)] public int Sex { get; set; } [Required] [MaxLength(11)] public string Phone { get; set; } [Required] [Range(1, 120, ErrorMessage = "年齡選擇範圍1~120歲")] public int Age { get; set; } //... 以下還有一百行程式碼 }
關於更多的System.ComponentModel.DataAnnotations資料https://docs.microsoft.com/zh-cn/dotnet/api/system.componentmodel.dataannotations?view=net-6.0