延續客戶端驗證主題,本文聚焦伺服器端驗證演進。雖然客戶端驗證提升體驗,但「所有客戶端資料不可信」是鐵律,伺服器端驗證不可省略。
if (!string.IsNullOrEmpty(str))
{
if (int.TryParse(str, out var val))
{
if (val > 0 && val < 100) { /* success */ }
else ShowMessage("輸入必須大於0小於100");
}
else ShowMessage("無法格式化為整數");
}
else ShowMessage("輸入為空");
缺點:可讀性差、難維護、邏輯耦合、錯誤訊息分散。
protected bool IsInt(string s) { ... }
protected bool IsInRange(int min, int max, int input) { ... }
進步:可重複使用、主邏輯較清晰。缺點:驗證規則仍分散、錯誤訊息處理分離、多欄位組合驗證仍繁瑣。
DataAnnotations(Required、Range、RegularExpression、自訂 ValidationAttribute)。ModelState.IsValid 統一判斷。IValidatableObject 實作跨欄位業務規則。文章呼應系列主題:透過抽象與慣例,讓驗證碼從「醜陋的巢狀判斷」進化為「優雅的宣告式屬性」。