為了保證用戶輸入系統的數據是有效的,同時也是為了避免程式出現不可預期的問題,保證應用程式能夠安全的運行,所以對輸入的數據進行驗證是非常有必要的。 剛開始學代碼的時候,我是這樣進行數據校驗的 看上去是不是很醜陋...,表單數據多的時候往往能寫上幾百上千行的if判斷語句。並且每個需要保存更新數據的地方都 ...
為了保證用戶輸入系統的數據是有效的,同時也是為了避免程式出現不可預期的問題,保證應用程式能夠安全的運行,所以對輸入的數據進行驗證是非常有必要的。
剛開始學代碼的時候,我是這樣進行數據校驗的
看上去是不是很醜陋...,表單數據多的時候往往能寫上幾百上千行的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