Asp.Net Core 数据校验(DataAnnotations,FluentValidation)
1.Asp.Net Core 数据校验(DataAnnotations,FluentValidation)
1.1 DataAnnotations
.NET Core中内置了对数据校验的支持,System.ComponentModel.DataAnnotations
- [Required]
- [EmailAddress]
- [RegularExpression]
- [[Phone]]
- CustomValidationAttribute
- IValidatableObject
添加用户的接口
请求参数验证
1.2 FluentValidation
FluentValidation:用类似于EF Core中Fluent API的方式进行校验规则的配置,也就是我们可以把对模型类的校验放到单独的校验类中。
(1)Install-Package FluentValidation.AspNetCore
(2)注入FluentValidation
builder.Services.AddFluentValidation(fv => {
Assembly assembly = Assembly.GetExecutingAssembly();
fv.RegisterValidatorsFromAssembly(assembly);// RegisterValidatorsFromAssemblies
});
(3) AbstractValidator<>
public class CreateUserRequestValidator : AbstractValidator<CreateUserRequest>
{
public CreateUserRequestValidator(UserManager<User> userManager)
{
//用户名
RuleFor(x => x.UserName).NotNull()
//异步
//.MustAsync(async (name,_) => (await userManager.Users.LongCountAsync<User>(u => u.UserName == name)) == 0)
.Must(name => userManager.Users.LongCount<User>(u => u.UserName == name) == 0)
.WithMessage(c => $"用户名{c.UserName}已经存在");
//密码
RuleFor(x => x.Password).NotNull().Length(3, 10)
.WithMessage("密码长度必须介于3到10之间")
.Equal(x => x.ConfimPassword)
.WithMessage("两次密码必须一致");
//邮箱
RuleFor(x => x.Email).NotNull().EmailAddress()
.WithMessage("邮箱格式不正确");
//电话
RuleFor(x => x.PhoneNumber).NotNull()
.Must(IsPhone)
.WithMessage("电话必须是11位数字");
}
private bool IsPhone(string str)
{
var re = @"^1\d{10}$";//正则表达式
if (Regex.IsMatch(str, re))
{
return true;
}
return false;
}
}
(4)测试
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!