文章目录
🌟 什么是 FluentValidation?
FluentValidation 是一个用于 .NET 应用程序的轻量级、类型安全的验证库,它允许你以流利的(Fluent)API 风格 为你的业务对象定义验证规则。
与传统的 IDataErrorInfo
或数据注解(Data Annotations)相比,FluentValidation 提供了更强大、灵活且易于维护的验证方式。
🔧 核心特点
特性 | 描述 |
---|---|
✅ 流式 API | 使用 C# Lambda 表达式定义验证规则,语法简洁直观 |
✅ 强类型验证 | 支持编译时检查,减少运行时错误 |
✅ 可扩展性强 | 支持自定义验证器、条件规则、异步验证等 |
✅ 与 MVVM 兼容 | 可轻松集成到 WPF、Blazor、ASP.NET Core 等框架中 |
✅ 多平台支持 | 支持 .NET Core、.NET 5/6/7/8、Mono 等 |
🧩 常见应用场景
- ✅ ASP.NET Core 请求模型验证
- ✅ WPF / WinForms 数据绑定验证
- ✅ Blazor 表单提交校验
- ✅ 后端服务层参数校验(如 DTO)
📚 官方资源
- 官网:https://fluentvalidation.net
- GitHub:https://github.com/FluentValidation/FluentValidation
📦 5分钟入门
1. 安装依赖
首先在项目中添加FluentValidation包引用:
<ItemGroup>
<PackageReference Include="FluentValidation" Version="12.0.0" />
</ItemGroup>
2. 定义数据模型
创建一个简单的用户模型类:
public class User
{
public string Username { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
3. 创建验证规则
使用FluentValidation定义验证规则:
public class UserValidator : AbstractValidator<User>
{
public UserValidator()
{
RuleFor(u => u.Username)
.NotEmpty().WithMessage("用户名不能为空")
.MinimumLength(3).WithMessage("用户名至少3个字符");
RuleFor(u => u.Email)
.NotEmpty().WithMessage("邮箱不能为空")
.EmailAddress().WithMessage("邮箱格式不正确");
RuleFor(u => u.Password)
.NotEmpty().WithMessage("密码不能为空")
.MinimumLength(6).WithMessage("密码至少6个字符");
}
}
4. 在ViewModel中集成验证
在ViewModel中调用验证器并处理验证结果:
private readonly UserValidator _validator = new();
private void Validate()
{
var user = new User
{
Username = Username,
Email = Email,
Password = Password,
};
ValidationResult results = _validator.Validate(user);
if (results.IsValid)
{
ValidationErrors = string.Empty;
}
else
{
ValidationErrors = string.Join("\\n", results.Errors.
Select(e => e.ErrorMessage));
}
}
5. 在UI中显示验证错误
在XAML中绑定验证错误信息:
<TextBlock Grid.Row="6" Margin="0,10,0,0"
Foreground="Red"
Text="{Binding ValidationErrors}" />
总结
FluentValidation提供了强大且灵活的验证规则定义方式,通过MVVM模式可以很好地集成到WPF应用中。这种方法具有以下优点:
- 验证规则与业务逻辑分离
- 支持复杂的条件验证
- 易于维护和扩展
- 提供清晰的错误信息