Introduction to FluentValidation
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 许可协议发布)

浙公网安备 33010602011771号