2、数据验证组件框架:FluentValidation for .NET - 开源项目研究文章

FluentValidation 是一个开源的 .NET 验证框架,以其优雅、简洁和链式操作而著称。它支持 MVC5、WebApi2 和 ASP.NET Core 的深度集成,并提供了丰富的内置验证器,同时也支持自定义验证器和本地化多语言。使用 FluentValidation,开发者可以通过继承 AbstractValidator<T> 来创建自定义的验证规则,并通过 RuleFor 方法定义验证逻辑。

FluentValidation 的安装非常简单,可以通过 NuGet 包管理器引用组件,例如使用以下命令安装核心库:

Install-Package FluentValidation

对于 ASP.NET Core 应用,可以使用以下命令安装扩展包:

Install-Package FluentValidation.AspNetCore

此外,还可以使用 FluentValidation.Mvc5 和 FluentValidation.WebApi 程序包来集成 ASP.NET MVC 5 或 WebApi 2 项目。

使用 FluentValidation 时,可以通过链式的方式对同一个属性应用多个验证规则,例如同时检查一个属性不为 null 且不等同于某个特定值。如果验证失败,可以选择返回 ValidationResult 对象或者抛出 ValidationException 异常。

FluentValidation 还支持子集合验证,允许开发者为集合中的每个元素定义验证规则,从版本 8.5 开始,可以使用 ChildRules 方法来简化这一过程。此外,它还支持验证规则集的概念,允许执行特定组的验证规则,而不是所有规则。

ASP.NET Core 中,FluentValidation 可以通过手动验证或自动验证来使用。手动验证时,开发者可以在控制器中注入验证器并调用它;自动验证则由 ASP.NET 在管道中自动调用验证器。FluentValidation 还提供了对客户端验证的支持,但这是通过提供元数据来实现的,而不是直接提供客户端验证代码。

FluentValidation 的核心设计模式是 fluent interface,它允许开发者以一种类似于自然语言的方式来编写验证逻辑,这使得代码易于阅读和维护。此外,它还提供了条件验证、本地化错误消息等功能,使其成为一个功能强大且灵活的验证工具。

总的来说,FluentValidation 是一个功能丰富、易于使用的 .NET 验证框架,适用于各种需要数据验证的场景,无论是在 Web 应用中还是在业务逻辑层,都能提供强大的支持。

以下是使用 FluentValidation 的基本介绍和步骤:

**  1. 安装 FluentValidation**

首先,您需要通过 NuGet 包管理器将 FluentValidation 添加到您的项目中。您可以使用以下命令:

Install-Package FluentValidation

如果您的项目是 ASP.NET Core 项目,您可能还需要安装针对 ASP.NET Core 的扩展包:

Install-Package FluentValidation.AspNetCore

**  2. 创建验证器**

创建一个验证器类,该类继承自 AbstractValidator<T>,其中 T 是您想要验证的模型类型。在验证器的构造函数中,使用 RuleFor 方法链来定义验证规则。

using FluentValidation;

public class PersonValidator : AbstractValidator<Person>

{

public PersonValidator()

{

RuleFor(person => person.Name).NotEmpty().WithMessage("Name is required.");

RuleFor(person => person.Email).EmailAddress().WithMessage("Invalid email address.");

// 更多验证规则...

}

}

**  3. 应用验证规则**

在您的应用程序中,您可以创建验证器的实例,并使用它来验证模型。

var validator = new PersonValidator();

var person = new Person { Name = "John Doe", Email = "[email protected]" };

var results = validator.Validate(person);

if (!results.IsValid)

{

// 处理验证错误

foreach (var failure in results.Errors)

{

Console.WriteLine($"Property {failure.PropertyName} failed validation. Error was: {failure.ErrorMessage}");

}

}

**  4. 在 ASP.NET Core 中使用 FluentValidation**

ASP.NET Core 中,您可以配置 FluentValidation 以自动验证传入的模型。这可以通过以下几种方式实现:

  • 手动验证:在控制器中注入验证器并调用它。
  • 自动验证:使用 ASP.NET Core 的验证管道自动调用验证器。
  • 使用 Action Filter:使用第三方包(如 SharpGrip.FluentValidation.AutoValidation)来实现自动验证。

**  手动验证示例:**

public class PeopleController : Controller

{

private readonly IValidator<Person> _validator;

public PeopleController(IValidator<Person> validator)

{

_validator = validator;

}

HttpPost

public IActionResult Create(Person person)

{

var validationResult = _validator.Validate(person);

if (!validationResult.IsValid)

{

// 将验证结果添加到 ModelState

validationResult.AddToModelState(ModelState);

return View(person);

}

// 保存模型或执行其他逻辑

return RedirectToAction("Index");

}

}

**  自动验证配置:**

在 Startup.cs 中的 ConfigureServices 方法中注册验证器。

services.AddControllersWithViews().AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<PersonValidator>());

**  5. 客户端验证**

FluentValidation 也支持客户端验证,但这通常需要一些额外的配置和可能的自定义代码来将服务器端验证规则转换为客户端验证逻辑。

**  6. 错误消息本地化**

FluentValidation 支持本地化错误消息,您可以使用资源文件或委托来自定义错误消息。

网址:https://docs.fluentvalidation.net/en/latest/#

相关推荐
爱吃奶酪的松鼠丶12 小时前
.net GRPC服务搭建,跨进程调用。C#应用和Python应用之间的通信。
python·c#·.net
S3下载站13 小时前
Microsoft .NET Framework 4.8 离线安装包 下载
microsoft·.net
AI.NET 极客圈15 小时前
AI与.NET技术实操系列(四):使用 Semantic Kernel 和 DeepSeek 构建AI应用
人工智能·.net
源之缘-OFD先行者16 小时前
GMap.NET + WPF:构建高性能 ADS-B 航空器追踪平台
.net·wpf·ads-b
小码编匠21 小时前
.NET 验证码生成神器基于 SkiaSharp 的高性能方案
后端·c#·.net
专注VB编程开发20年21 小时前
Aspose.words,Aspose.cells,vb.net,c#加载许可证,生成操作选择:嵌入的资源
c#·word·.net·vb.net
破罐子不摔21 小时前
【C#使用S7.NET库读取和写入西门子PLC变量】
java·c#·.net
下一秒_待续1 天前
.Net8项目使用docker、docker-compose部署步骤
docker·容器·.net
Minily1 天前
35岁程序员的中年求职记:四次碰壁后的深度反思
.net·面试题·35岁危机