.Net Core 数据校验

微软内置了数据校验的类:

System.ComponentModel.DataAnnotations

但是这个校验和数据模型绑定了一起,职责没有分开

public class Login1Request
{
    [Required]
    [EmailAddress]
    [RegularExpression("^.*@(qq|163)\\.com$", ErrorMessage = "只支持QQ和163邮箱")]
    public string Email { get; set; }
    [Required]
    [StringLength(10, MinimumLength = 3)]
    public string Password { get; set; }
    [Compare(nameof(Password2), ErrorMessage = "两次密码必须一致")]
    public string Password2 { get; set; }
}

 

所以使用第三方的校验类:FluentValidation.AspNetCore,这是一个单独的类

public class Login2RequestValidator : AbstractValidator<Login2Request>
{
    public Login2RequestValidator()
    {
        RuleFor(x => x.Email).NotNull().EmailAddress()
            .Must(v => v.EndsWith("@qq.com") || v.EndsWith("@163.com"))
            .WithMessage("只支持QQ和163邮箱");
        RuleFor(x => x.Password).NotNull().Length(3, 10)
            .WithMessage("密码长度必须介于3到10之间")
             .Equal(x => x.Password2).WithMessage("两次密码必须一致");
    }
}

并且类中可以注入其他的服务:

public class Login3RequestValidator : AbstractValidator<Login3Request>
{
    public Login3RequestValidator(TestDbContext dbCtx)
    {
        RuleFor(x => x.UserName).NotNull()
            .Must(name => dbCtx.Users.Any(u => u.UserName == name))
            .WithMessage(c => $"用户名{c.UserName}不存在");
    }
}

Part5-13:FluentValidation中注入服务_哔哩哔哩_bilibili

posted @ 2022-08-13 21:18  百年俊少  阅读(268)  评论(0编辑  收藏  举报