在.NET 開發中,模型驗證是一個重要的環節,它確保了應用程式中的數據完整性和一致性。ASP.NET Core MVC 框架提供了一套強大的數據驗證機制,其中
ValidationAttribute
是一個核心元件。透過使用不同的驗證內容,開發者可以在模型類上定義驗證規則,這些規則會在模型繫結時自動執行。
本文將詳細介紹如何在.NET 中使用
ValidationAttribute
,包括常見的驗證內容以及如何自訂驗證內容。
內建的 ValidationAttribute
ASP.NET Core 提供了一系列內建的
ValidationAttribute
,這些內容可以直接套用於模型類的內容上,以定義驗證規則。以下是一些常用的驗證內容:
RequiredAttribute - 確保內容不為 null 或空字串。
RangeAttribute - 確保內容值在指定範圍內。
StringLengthAttribute - 確保字串內容的長度在指定範圍內。
RegularExpressionAttribute - 使用正規表式驗證內容值。
CompareAttribute - 比較兩個內容的值是否相同。
EmailAddressAttribute - 驗證內容值是否符合電子信件地址的格式。
UrlAttribute - 驗證內容值是否是一個有效的 URL。
使用範例
下面是一個簡單的模型類範例,展示了如何使用內建的
ValidationAttribute
:
public classUserModel
{
[Required(ErrorMessage = "使用者名稱是必填項")]
publicstring Username { get; set; }
[Required(ErrorMessage = "密碼是必填項")]
[StringLength(100, MinimumLength = 6, ErrorMessage = "密碼長度必須在6到100個字元之間")]
publicstring Password { get; set; }
[Required(ErrorMessage = "電子信件是必填項")]
[EmailAddress(ErrorMessage = "請輸入有效的電子信件地址")]
publicstring Email { get; set; }
}
在上面的範例中,
Username
、
Password
和
Email
內容上分別套用了
RequiredAttribute
、
StringLengthAttribute
和
EmailAddressAttribute
。這些內容定義了驗證規則,並指定了錯誤訊息,這些錯誤訊息將在驗證失敗時顯示給使用者。
自訂 ValidationAttribute
除了使用內建的驗證內容,你還可以根據需要自訂驗證內容。要建立自訂的
ValidationAttribute
,你需要繼承
ValidationAttribute
類,並重寫
IsValid
方法。下面是一個簡單的自訂驗證內容的範例:
public classCustomValidationAttribute : ValidationAttribute
{
protectedoverride ValidationResult IsValid(objectvalue, ValidationContext validationContext)
{
// 在這裏編寫自訂驗證邏輯
// 如果驗證透過,返回 ValidationResult.Success
// 如果驗證失敗,返回一個新的 ValidationResult,包含錯誤訊息
if (valueisstring strValue && !strValue.StartsWith("Custom"))
{
returnnew ValidationResult("值必須以 'Custom' 開頭");
}
return ValidationResult.Success;
}
}
然後,你可以像使用內建驗證內容一樣在模型類中使用自訂驗證內容:
public classCustomModel
{
[CustomValidation]
publicstring CustomValue { get; set; }
}
模型驗證過程
在 ASP.NET Core MVC 中,模型驗證通常發生在以下兩個階段:
模型繫結階段 - 當請求數據被繫結到模型時,所有的驗證內容都會被觸發。如果驗證失敗,模型狀態將包含錯誤資訊,並且你可以透過檢視來顯示這些錯誤資訊。
操作方法驗證階段 - 在控制器操作方法被呼叫之前,ASP.NET Core 會自動執行模型驗證。如果模型驗證失敗,操作方法將不會被呼叫,並且客戶端會收到一個 400 Bad Request 響應。
顯示驗證錯誤
在檢視中,你可以使用
ModelState
來檢查驗證錯誤,並顯示相應的錯誤訊息。例如,在 Razor 檢視中,你可以使用以下程式碼來顯示錯誤訊息:
<div>
<labelasp-for="Username"></label>
<inputasp-for="Username" />
<spanasp-validation-for="Username" class="text-danger"></span>
</div>
<div>
<labelasp-for="Password"></label>
<inputasp-for="Password"type="password" />
<spanasp-validation-for="Password" class="text-danger"></span>
</div>
<div>
<labelasp-for="Email"></label>
<inputasp-for="Email" />
<spanasp-validation-