.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 @   爱晒太阳的懒猫。。  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2021-02-27 操作系统面试常见问题
2021-02-27 浏览器从输入url到页面加载发什么了
2021-02-27 计网运输层
点击右上角即可分享
微信分享提示