在.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-