当前位置: 欣欣网 > 码农

详解.NET Model ValidationAttribute的使用

2024-02-22码农

在.NET 开发中,模型验证是一个重要的环节,它确保了应用程序中的数据完整性和一致性。ASP.NET Core MVC 框架提供了一套强大的数据验证机制,其中 ValidationAttribute 是一个核心组件。通过使用不同的验证属性,开发者可以在模型类上定义验证规则,这些规则会在模型绑定时自动执行。

本文将详细介绍如何在.NET 中使用 ValidationAttribute ,包括常见的验证属性以及如何自定义验证属性。

内置的 ValidationAttribute

ASP.NET Core 提供了一系列内置的 ValidationAttribute ,这些属性可以直接应用于模型类的属性上,以定义验证规则。以下是一些常用的验证属性:

  1. RequiredAttribute - 确保属性不为 null 或空字符串。

  2. RangeAttribute - 确保属性值在指定范围内。

  3. StringLengthAttribute - 确保字符串属性的长度在指定范围内。

  4. RegularExpressionAttribute - 使用正则表达式验证属性值。

  5. CompareAttribute - 比较两个属性的值是否相同。

  6. EmailAddressAttribute - 验证属性值是否符合电子邮件地址的格式。

  7. UrlAttribute - 验证属性值是否是一个有效的 URL。

使用示例

下面是一个简单的模型类示例,展示了如何使用内置的 ValidationAttribute

public classUserModel
{
[Required(ErrorMessage = "用户名是必填项")]
publicstring Username { getset; }
[Required(ErrorMessage = "密码是必填项")]
[StringLength(100, MinimumLength = 6, ErrorMessage = "密码长度必须在6到100个字符之间")]
publicstring Password { getset; }
[Required(ErrorMessage = "电子邮件是必填项")]
[EmailAddress(ErrorMessage = "请输入有效的电子邮件地址")]
publicstring Email { getset; }
}

在上面的示例中, 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 { getset; }
}

模型验证过程

在 ASP.NET Core MVC 中,模型验证通常发生在以下两个阶段:

  1. 模型绑定阶段 - 当请求数据被绑定到模型时,所有的验证属性都会被触发。如果验证失败,模型状态将包含错误信息,并且你可以通过视图来显示这些错误信息。

  2. 操作方法验证阶段 - 在控制器操作方法被调用之前,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-