FluentValidation 是一个 .NET 下流行的验证库

64 阅读2分钟

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 包

在项目中安装:

  • FluentValidation
  • FluentValidation.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.csProgram.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 官方文档