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

相关推荐
编程乐趣2 小时前
Garnet:微软官方基于.Net 8开源缓存系统,可无需任何改动直接替代Redis,而且还更高性能!
microsoft·缓存·.net
Nita.9 小时前
C#基础 枚举 Enumeration从基础到进阶
c#·.net·枚举
Crazy Struggle11 小时前
推荐一款 .NET 智慧水务物联网系统
.net·物联网平台·水务系统
啊晚14 小时前
ASP.NET Core - .NET 6 以上版本的入口文件
后端·asp.net·.net
CS软件开发框架15 小时前
.NETCore WebApi阻止接口重复调用(并发操作)
.net·.netcore
玉面小君15 小时前
WPF如何跨线程更新界面
c#·.net·wpf
cqths15 小时前
.NET 9.0 的 Blazor Web App 项目中 Hash 变换(MD5、Pbkdf2) 使用备忘
c#·.net·web app
异步时刻1 天前
Avalonia 入门笔记(零):概述
笔记·.net