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

 

posted @ 2025-02-27 23:35  爱晒太阳的懒猫。。  阅读(88)  评论(0)    收藏  举报