.NET 数据校验——FluentValidation

150 阅读1分钟

参考

ASP.NET Core数据的校验_netcore参数验证_咬口大葱的博客-CSDN博客

在.NET Core 中使用 FluentValidation 进行规则验证 - 知乎 (zhihu.com)

环境搭建

FluentValidation.AspNetCore

image.png

服务注册:

image.png

builder.Services.AddFluentValidation(opt =>
{
    opt.RegisterValidatorsFromAssembly(Assembly.GetEntryAssembly());
});

编写校验规则

using FluentValidation;

namespace check_1
{
    public record User(string Email, string Password, string Password2);

    public class UserValidator : AbstractValidator<User>
    {
        public UserValidator()
        {
            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("两次密码必须一致");
        }
    }
}

测试

主动校验

image.png

[HttpGet(Name = "GetWeatherForecast")]
public object Get()
{
    User u =  new User("123@456.com","", "err_password");

    var userValidator = new UserValidator();
    var validationResult = userValidator.Validate(u);

    if (!validationResult.IsValid)
    {
        return BadRequest(validationResult.Errors);
    }

    return Ok();
}

参数传入校验

    [HttpPost]
    public IActionResult Register(User newUser)
    {
        return Ok();
    }
    
    

image.png