FluentValidation 用于 C# (.NET):完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 FluentValidation,为什么需要它?



FluentValidation 是一个流行的 .NET 库,用于构建严格且可读的业务对象验证规则。与内置的验证属性(Data Annotations)不同,FluentValidation 提供了一种基于分离验证逻辑和数据模型的方法。这使得代码更清晰、更易测试、更灵活。



该库使用“流畅接口”(Fluent Interface),允许通过点符号构建验证规则链。FluentValidation 支持复杂场景:级联验证、条件规则、自定义验证器、列表和嵌套对象的处理。



为什么需要 FluentValidation?

  • 职责分离:验证规则不会污染数据模型。
  • 可读性:规则链易于阅读和维护。
  • 灵活性:轻松创建复杂、条件和组合规则。
  • 可测试性:验证器可以像普通类一样进行测试。
  • 集成:与 ASP.NET Core、MVC、Web API 和其他框架完美集成。


安装 FluentValidation



通过 NuGet 包管理器安装该库。在包管理器控制台或 .NET CLI 终端中执行以下任一命令:



// 通过 Package Manager Console 安装Install-Package FluentValidation

// 通过 .NET CLI 安装dotnet add package FluentValidation


要与 ASP.NET Core 集成,还需要以下包:



dotnet add package FluentValidation.AspNetCore


快速入门:代码示例



假设我们有一个用户模型:



public class User{    public int Id { get; set; }    public string Name { get; set; }    public string Email { get; set; }    public int Age { get; set; }    public string Password { get; set; }    public string ConfirmPassword { get; set; }}


创建一个验证器,继承自 AbstractValidator<User>:



using FluentValidation;

public class UserValidator : AbstractValidator<User>{ public UserValidator() { RuleFor(user => user.Name) .NotEmpty().WithMessage("姓名为必填项") .Length(2, 50).WithMessage("姓名长度应在 2 到 50 个字符之间");

RuleFor(user => user.Email) .NotEmpty().WithMessage("电子邮件为必填项") .EmailAddress().WithMessage("电子邮件格式不正确");

RuleFor(user => user.Age) .InclusiveBetween(18, 120).WithMessage("年龄应在 18 到 120 岁之间");

RuleFor(user => user.Password) .NotEmpty().WithMessage("密码为必填项") .MinimumLength(6).WithMessage("密码至少需要 6 个字符");

RuleFor(user => user.ConfirmPassword) .Equal(user => user.Password).WithMessage("密码不匹配"); }}


使用验证器:



var validator = new UserValidator();var user = new User{    Name = "A",    Email = "invalid-email",    Age = 15,    Password = "123",    ConfirmPassword = "456"};

var result = validator.Validate(user);

if (!result.IsValid){ foreach (var error in result.Errors) { Console.WriteLine($"属性: {error.PropertyName}, 错误: {error.ErrorMessage}"); }}


FluentValidation 的主要方法



以下是该库的关键方法,包含详细说明和示例。



1. RuleFor()

功能:为对象的特定属性定义验证规则。这是开始验证的主要方法。

推荐