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.DependencyInjectionExtensionsAbstractValidator 基类
您可以通过继承 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 反馈 — 无需本地设置。
此课程中的所有课时
- 数据注解验证
- FluentValidation 规则
- 自定义规则与条件规则
- 将验证集成到 API