.net core使用FluentValidation校验
asp.net core需要两个包FluentValidation 和 FluentValidation.AspNetCore
// 注册 FluentValidation builder.Services.AddFluentValidationAutoValidation(); // 启用自动验证 // 注册验证器 builder.Services.AddValidatorsFromAssemblyContaining<PersonValidator>();
//自定义校验错误的响应
builder.Services.AddControllers()
.ConfigureApiBehaviorOptions(options =>
{
options.InvalidModelStateResponseFactory = context =>
{
var errors = context.ModelState
.Where(e => e.Value.Errors.Count > 0)
.ToDictionary(
kvp => kvp.Key,
kvp => kvp.Value.Errors.Select(e => e.ErrorMessage).ToArray()
);
return new BadRequestObjectResult(new
{
Message = "Validation errors occurred.",
Errors = errors
});
};
});
//校验类
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Email { get; set; }
}
public class PersonValidator : AbstractValidator<Person>//一定要继承这个类
{
public PersonValidator()
{
RuleFor(p => p.Name).NotEmpty().WithMessage("Name is required.");
RuleFor(p => p.Age).GreaterThan(0).WithMessage("Age must be greater than 0.");
RuleFor(p => p.Email).NotEmpty().EmailAddress().WithMessage("A valid email is required.");
}
}
不仅仅是可以校验数据格式,还可以校验数据库中用户是否存在
1 public class Login3RequestValidator:AbstractValidator<Login3Request> 2 { 3 public Login3RequestValidator(TestDbContext dbCtx) 4 { 1 RuleFor(x => x.UserName).NotNull() 2 .MustAsync((name,_) => dbCtx.Users.AnyAsync(u => u.UserName == name)) 3 .WithMessage(c => $"用户名{c.UserName}不存在");//数据库服务 8 } 9 }

浙公网安备 33010602011771号