0Pricing
C# Academy · 课时

FluentValidation 规则

使用流式语法编写表达力强的验证器。

FluentValidation 规则 是 CoddyKit 上的免费 C# Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C# Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C# Academy 课程共包含 4 节课。

为什么选择 FluentValidation

FluentValidation 是一个流行的 .NET 库,可以将验证规则从模型中移出,放入专用的验证器类中。规则通过易读且可链式调用的流畅 API 表达,从而让模型保持简洁,并使规则易于测试。

dotnet add package FluentValidation
dotnet add package FluentValidation.DependencyInjectionExtensions

AbstractValidator 基类

您可以通过继承 AbstractValidator<T> 来编写 validator,其中 T 是要验证的模型。规则在构造函数中定义。

using FluentValidation;

public class CustomerValidator : AbstractValidator<Customer>
{
    public CustomerValidator()
    {
        // rules go here
    }
}

使用 RuleFor 定义第一个规则

RuleFor 通过 lambda 选择一个属性,然后在该属性上链式添加验证器。NotEmpty() 会拒绝 null、空字符串和默认值。

public class CustomerValidator : AbstractValidator<Customer>
{
    public CustomerValidator()
    {
        RuleFor(c => c.Name).NotEmpty();
    }
}

链式使用多个验证器

每个 RuleFor 都可以链式使用多个验证器。它们会按顺序运行,并且必须全部通过。这种写法几乎和一句话一样清晰。

RuleFor(c => c.Name)
    .NotEmpty()
    .MinimumLength(2)
    .MaximumLength(50);

内置验证器

FluentValidation 提供了许多验证器:NotNull、NotEmpty、EmailAddress、Length、InclusiveBetween、GreaterThan、Matches(正则表达式)等。

RuleFor(c => c.Email).NotEmpty().EmailAddress();
RuleFor(c => c.Age).InclusiveBetween(18, 120);
RuleFor(c => c.Phone).Matches(@"^\+?[0-9]{7,15}$");

自定义错误消息

使用 WithMessage 覆盖默认消息。您可以插入 {PropertyName} 和 {PropertyValue} 等占位符。

RuleFor(c => c.Email)
    .NotEmpty().WithMessage("Email is required.")
    .EmailAddress().WithMessage("{PropertyValue} is not a valid email.");

自定义错误代码和严重性

除了消息之外,您还可以附加机器可读的 WithErrorCode 和 WithSeverity(错误、警告、信息),帮助客户端采取不同的响应方式。

RuleFor(c => c.Name)
    .NotEmpty()
    .WithErrorCode("NAME_REQUIRED")
    .WithSeverity(Severity.Error);

验证嵌套对象

使用 SetValidator 为子对象复用 validator,从而让规则保持模块化。

public class OrderValidator : AbstractValidator<Order>
{
    public OrderValidator()
    {
        RuleFor(o => o.Customer).SetValidator(new CustomerValidator());
    }
}

验证集合

RuleForEach 会将规则应用于集合中的每一项。

public class OrderValidator : AbstractValidator<Order>
{
    public OrderValidator()
    {
        RuleForEach(o => o.Items)
            .ChildRules(item => item.RuleFor(i => i.Quantity).GreaterThan(0));
    }
}

手动运行 validator

您可以直接调用 validator 并检查结果。ValidationResult 提供 IsValid 和 Errors 列表。

var validator = new CustomerValidator();
ValidationResult result = validator.Validate(customer);

if (!result.IsValid)
{
    foreach (var error in result.Errors)
    {
        Console.WriteLine(error.PropertyName + ": " + error.ErrorMessage);
    }
}

异步验证

当规则需要执行 I/O(例如检查数据库)时,请使用 ValidateAsync 以及 MustAsync 等 async 验证器;我们将在自定义规则课程中详细介绍。

ValidationResult result = await validator.ValidateAsync(customer);

快速检查

测试您对 FluentValidation 基础知识的掌握情况。

回顾

FluentValidation 将规则放在 AbstractValidator<T> 类中。RuleFor 选择目标属性,然后链式使用 NotEmpty、EmailAddress 和 InclusiveBetween 等内置验证器。使用 WithMessage、WithErrorCode 和 WithSeverity 自定义反馈,使用 SetValidator 和 RuleForEach 复用逻辑,并通过 Validate/ValidateAsync 运行规则。

常见问题解答

「FluentValidation 规则」课时是免费的吗?

是的 — 「FluentValidation 规则」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C# Academy 课程的其余内容,请升级到 CoddyKit PRO。 C# Academy 课程共包含 4 节课。

「FluentValidation 规则」这节课中我会学到什么?

使用流式语法编写表达力强的验证器。 你通过在浏览器中直接运行的动手代码来练习 C# Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 C# Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 C# Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「FluentValidation 规则」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 C# Academy 课中编写并运行代码吗?

能。每节 C# Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 数据注解验证
  2. FluentValidation 规则
  3. 自定义规则与条件规则
  4. 将验证集成到 API
← 返回 C# Academy