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;    }}

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

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

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 Validate(ValidationContext validationContext)    {        if (Email != ConfirmEmail)        {            yield return new ValidationResult("两次输入的邮箱不一致。", new[] { nameof(ConfirmEmail) });        }    }}

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

以上就是ASP.NET Core 中的自定义模型验证器如何创建?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1441336.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 17:59:08
下一篇 2025年12月17日 17:59:20

相关推荐

发表回复

登录后才能评论
关注微信