惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
Stack Overflow Blog
Stack Overflow Blog
D
DataBreaches.Net
罗磊的独立博客
博客园 - 司徒正美
Last Week in AI
Last Week in AI
The Cloudflare Blog
大猫的无限游戏
大猫的无限游戏
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog RSS Feed
The GitHub Blog
The GitHub Blog
宝玉的分享
宝玉的分享
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
小众软件
小众软件
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Hugging Face - Blog
Hugging Face - Blog
B
Blog
博客园 - 【当耐特】
V
V2EX
Apple Machine Learning Research
Apple Machine Learning Research
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
酷 壳 – CoolShell
酷 壳 – CoolShell

博客园 - lightsong

Symmetric vs. Asymmetric Semantic Search Hierarchical Navigable Small Worlds (HNSW) Vision Transformer + BentoML ML Serving/编排工具 Introducing Gemma 3 270M: The compact model for hyper-efficient AI Utopia -- 企业世界模型 trustgraph semantica semantica vs graphti Industrial-Strength Natural Language Processing seata reference with springboot and other valuable demo outbox pattern with springboot Saga pattern with springboot 基于 Sentence Transformers 的具体应用案例 Vault with Keycloak as workload IAM Ontology Reasoning System ADR Claude Code的hook The AI-Native SDLC playbook Introduction to Dapper Introduction to AutoFixture Introduction to FluentAssertions Understanding Return Types: IEnumerable, IReadOnlyCollection, and List Introduction to Refit Introduction to Carter Introduction to Minimal APIs Introduction to MediaTr Building Resilient .NET Applications with Polly Understanding Event-Driven Architecture Understanding CQRS in .NET
Introduction to FluentValidation
lightsong · 2026-08-28 · via 博客园 - lightsong

Introduction to FluentValidation

https://jdaniel1987.github.io/FluentValidation

这篇文章写得非常清晰,涵盖了从基础安装到结合 Minimal API 和 MediatR 的高级用法。为了让你转载到博客时效果更好,我特意保留了代码块,并对关键术语做了润色,读起来会更顺畅。


📝 博客文章草稿

标题: FluentValidation 简介:编写更具表现力的 .NET 验证逻辑
作者: Jaime Daniel Delgado Ortega
发布时间: 2024年9月12日
阅读时间: 3 分钟


引言

在应用开发的世界里,在处理数据之前确保其有效性至关重要。这正是 FluentValidation 的用武之地,它为 .NET 应用程序提供了一种强大而灵活的方式来处理验证逻辑。

FluentValidation 是一个流行的库,它提供了一个流畅的接口来为您的对象定义验证规则。它帮助您将验证逻辑与业务逻辑分离开来,使代码更清晰、更易于维护。

FluentValidation 的优势

  • 流畅的接口 (Fluent Interface): 它使用流畅的接口,允许您以清晰且富有表现力的方式构建验证规则。
  • 关注点分离 (Separation of Concerns): 验证规则与业务逻辑分离,有助于构建干净、有条理的代码库。
  • 可扩展性 (Extensibility): FluentValidation 具有高度的可扩展性,允许您根据需要创建自定义验证器和规则。
  • 集成性 (Integration): 它能与 ASP.NET Core 和其他 .NET 框架无缝集成,并提供对依赖注入的内置支持。
  • 可测试性 (Testability): 验证逻辑可以独立于业务逻辑进行测试,从而提高应用程序的可靠性。

使用示例

以下是将 FluentValidation 集成到项目中的具体步骤。

1. 安装 NuGet 包

要开始使用 FluentValidation,请安装 FluentValidation NuGet 包。在您的项目中,右键单击 -> 管理 NuGet 包,搜索“FluentValidation”,然后点击安装。

[图片占位:NuGet 包管理器安装 FluentValidation 的截图]
(建议在此处插入一张显示在 Visual Studio 中搜索并安装 FluentValidation 包的截图)

2. 创建请求对象

定义您想要验证的对象。例如,创建一个 CreateUserRequest 类:

public class CreateUserRequest
{
    public string Name { get; set; }
    public string Email { get; set; }
}

3. 定义验证器

通过继承 AbstractValidator<T> 来创建一个验证器,其中 T 是您要验证的对象类型。在构造函数中定义您的规则。

using FluentValidation;

public class CreateUserRequestValidator : AbstractValidator<CreateUserRequest>
{
    public CreateUserRequestValidator()
    {
        RuleFor(x => x.Name)
            .NotEmpty()
            .WithMessage("Name is required.");

        RuleFor(x => x.Email)
            .NotEmpty()
            .EmailAddress()
            .WithMessage("A valid email is required.");
    }
}

4. 在 Program.cs 中注册 FluentValidation

要将 FluentValidation 与您的 ASP.NET Core 应用程序集成,请在 Program.cs 文件中使用 FluentValidation.AspNetCore 提供的扩展方法进行注册。

builder.Services.AddControllers()
    .AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<CreateUserRequestValidator>());

5. 在控制器或 Minimal API 中使用 FluentValidation

在控制器中,当您使用模型绑定时,验证会自动应用。例如:

[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
    [HttpPost]
    public IActionResult CreateUser([FromBody] CreateUserRequest request)
    {
        // 如果验证失败,会自动返回一个 400 Bad Request 响应
        // 并附带验证错误信息。
        return Ok();
    }
}

对于 Minimal APIs,您需要手动验证请求:

app.MapPost("/api/users", async (CreateUserRequest request, IValidator<CreateUserRequest> validator) =>
{
    var result = await validator.ValidateAsync(request);
    if (!result.IsValid)
    {
        return Results.BadRequest(result.Errors);
    }

    // 处理有效的请求
    return Results.Ok();
})
.WithName("CreateUser")
.WithOpenApi();

Minimal APIs 的小技巧

如果您在 Minimal APIs 中同时使用 MediatR,可以引入 MediatR.Extensions.FluentValidation.AspNetCore 包。这样,当您通过 _mediator.Send(...) 发送命令/查询/请求时,它会自动进行验证。

services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly()));
services.AddValidatorsFromAssemblyContaining<CreateUserRequestValidator>();
services.AddFluentValidation([typeof(CreateUserRequestValidator).Assembly]);

6. 自定义验证规则 (可选)

FluentValidation 允许您为更复杂的场景创建自定义验证规则。

public class CustomValidation : AbstractValidator<CreateUserRequest>
{
    public CustomValidation()
    {
        RuleFor(x => x.Name)
            .Must(BeAValidName)
            .WithMessage("Invalid name.");
    }

    private bool BeAValidName(string name)
    {
        // 自定义验证逻辑
        return !string.IsNullOrWhiteSpace(name);
    }
}

结论

FluentValidation 为处理 .NET 应用程序中的验证提供了一种强大而灵活的方式。通过将验证规则与业务逻辑分离,它有助于保持代码库的整洁和有序。在您的项目中开始使用 FluentValidation,以确保数据有效且代码易于维护!


标签: #C# #.NET #FluentValidation #Validation

(本文根据 CC BY 4.0 许可协议发布)

出处:http://www.cnblogs.com/lightsong/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。