FluentValidation 是一个 .NET 下流行的验证库,用于实现对象属性的验证逻辑。它采用流式(Fluent)API,支持复杂规则、条件验证、级联验证等,常用于模型验证(如 DTO、ViewModel),替代传统的属性特性验证方式。
主要特点:
- 语法简洁,易读易写
- 支持自定义规则、条件验证、集合验证
- 可与 ASP.NET Core 集成,实现请求模型自动验证
- 支持本地化和自定义错误消息
示例:验证用户注册模型
假设有如下模型:
public class RegisterModel
{
public string UserName { get; set; }
public string Email { get; set; }
public int Age { get; set; }
}
定义验证器:
using FluentValidation;
public class RegisterModelValidator : AbstractValidator<RegisterModel>
{
public RegisterModelValidator()
{
RuleFor(x => x.UserName)
.NotEmpty().WithMessage("用户名不能为空")
.Length(3, 20).WithMessage("用户名长度需在3到20之间");
RuleFor(x => x.Email)
.NotEmpty().WithMessage("邮箱不能为空")
.EmailAddress().WithMessage("邮箱格式不正确");
RuleFor(x => x.Age)
.InclusiveBetween(18, 100).WithMessage("年龄必须在18到100之间");
}
}
使用验证器:
var model = new RegisterModel
{
UserName = "",
Email = "invalid_email",
Age = 15
};
var validator = new RegisterModelValidator();
var result = validator.Validate(model);
foreach (var error in result.Errors)
{
Console.WriteLine(error.ErrorMessage);
}
输出:
用户名不能为空
邮箱格式不正确
年龄必须在18到100之间
说明:
- 通过继承
AbstractValidator<T>并在构造函数中定义规则。 - 支持链式调用和自定义错误消息。
- 可与 ASP.NET Core 自动集成,实现请求体自动验证。
更多用法可参考官方文档:FluentValidation 官网。
在 ASP.NET Core 中集成 FluentValidation 进行模型验证非常简单,通常用于自动验证请求模型(如 DTO、ViewModel)。以下是标准集成步骤:
1. 安装 NuGet 包
在项目中安装:
FluentValidationFluentValidation.AspNetCore
dotnet add package FluentValidation
dotnet add package FluentValidation.AspNetCore
2. 定义模型和验证器
public class RegisterModel
{
public string UserName { get; set; }
public string Email { get; set; }
public int Age { get; set; }
}
using FluentValidation;
public class RegisterModelValidator : AbstractValidator<RegisterModel>
{
public RegisterModelValidator()
{
RuleFor(x => x.UserName).NotEmpty().Length(3, 20);
RuleFor(x => x.Email).NotEmpty().EmailAddress();
RuleFor(x => x.Age).InclusiveBetween(18, 100);
}
}
3. 在 Startup.cs 或 Program.cs 注册 FluentValidation
ASP.NET Core 6+(最常见写法):
using FluentValidation;
using FluentValidation.AspNetCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers()
.AddFluentValidation(fv =>
{
fv.RegisterValidatorsFromAssemblyContaining<RegisterModelValidator>();
});
var app = builder.Build();
app.MapControllers();
app.Run();
4. 控制器中使用模型
[ApiController]
[Route("[controller]")]
public class RegisterController : ControllerBase
{
[HttpPost]
public IActionResult Register(RegisterModel model)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
// 业务逻辑
return Ok("注册成功");
}
}
说明:
- 请求体自动验证,验证失败时 ASP.NET Core 会自动返回 400 错误和详细信息。
- 验证器可自动发现,无需手动调用。
更多高级用法可参考:FluentValidation 官方文档。