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 = "john@example.com" };

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/#

相关推荐
有来技术8 小时前
ASP.NET Core 权限管理系统(RBAC)设计与实现|vue3-element-admin .NET 后端
vue.js·后端·c#·asp.net·.net
云草桑9 小时前
15分钟快速了解 Odoo
数据库·python·docker·postgresql·.net·odoo
Traced back10 小时前
SQL Server数据自动清理系统最终版(C# WinForms完整源码)
数据库·c#·.net
初九之潜龙勿用1 天前
C# 操作Word模拟解析HTML标记之背景色
开发语言·c#·word·.net·office
时光追逐者1 天前
使用 MWGA 帮助 7 万行 Winforms 程序快速迁移到 WEB 前端
前端·c#·.net
程序猿小玉兒1 天前
解决大文件上传失败问题
c#·.net
GfhyPpNY1 天前
信号交叉口联网燃料电池混合动力汽车生态驾驶的双层凸优化探索
.net
贾修行2 天前
.NET MAUI 跨平台开发全栈指南:从零构建现代化多端应用
.net·路由·.net maui
时光追逐者2 天前
使用 NanUI 快速创建具有现代用户界面的 WinForm 应用程序
ui·c#·.net·winform
缺点内向2 天前
在 C# 中为 Word 段落添加制表位:使用 Spire.Doc for .NET 实现高效排版
开发语言·c#·自动化·word·.net