ASP.NET Core 中的自定义模型验证器如何创建?

通过继承ValidationAttribute并重写IsValid方法可创建自定义模型验证器,如CustomEmailAttribute用于验证邮箱格式;将特性应用于模型属性即可实现灵活数据校验;支持结合IValidatableObject进行跨字段验证,或在控制器中处理异步验证逻辑,提升API输入的合法性与代码复用性。

ASP.NET Core 中的自定义模型验证器如何创建?

在 ASP.net Core 中创建自定义模型验证器,主要是通过继承 ValidationAttribute 类并重写其 IsValid 方法来实现。这种方式可以让你对模型属性进行灵活的数据验证,比如检查字符串格式、数值范围或自定义业务规则。

创建自定义验证特性类

首先定义一个类,继承 ValidationAttribute,并重写 IsValid 方法:

 public class CustomEmailAttribute : ValidationAttribute {     protected override ValidationResult IsValid(object value, ValidationContext validationContext)     {         if (value == null || string.IsNullOrEmpty(value.ToString()))         {             return new ValidationResult("邮箱不能为空。");         }          var email = value.ToString();         if (!email.Contains("@") || !email.Contains("."))         {             return new ValidationResult("邮箱格式不正确。");         }          return ValidationResult.Success;     } } 

在模型中使用自定义验证器

将自定义特性应用到需要验证的模型属性上:

ASP.NET Core 中的自定义模型验证器如何创建?

百度文心百中

百度大模型语义搜索体验中心

ASP.NET Core 中的自定义模型验证器如何创建? 22

查看详情 ASP.NET Core 中的自定义模型验证器如何创建?

 public class UserRegistrationModel {     [Required(ErrorMessage = "用户名是必填项")]     public string UserName { get; set; }      [CustomEmail]     public string Email { get; set; }      [Range(18, 100, ErrorMessage = "年龄必须在18到100之间")]     public int Age { get; set; } } 

支持异步验证(可选进阶)

如果需要执行异步验证(如数据库查重),可以结合 IAsyncEnumerable 或自定义实现 IClientModelValidator 和异步逻辑,但注意默认的 ValidationAttribute 不直接支持异步。更推荐的方式是使用 ActionFilter 或在控制器中手动调用异步检查。

也可以实现 IValidatableObject 接口,在模型内部添加跨字段验证逻辑:

 public class UserRegistrationModel : IValidatableObject {     public string Email { get; set; }     public string ConfirmEmail { get; set; }      public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)     {         if (Email != ConfirmEmail)         {             yield return new ValidationResult("两次输入的邮箱不一致。", new[] { nameof(ConfirmEmail) });         }     } } 

基本上就这些。自定义模型验证器让数据校验更清晰且可复用,配合内置特性一起使用,能有效保障 API 输入的合法性。

上一篇
下一篇
text=ZqhQzanResources