当前位置: 首页 > article >正文

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


http://www.kler.cn/a/501268.html

相关文章:

  • 机器人碳钢去毛刺,用大扭去毛刺主轴可轻松去除
  • C# 继承(接口)
  • 2025封禁指定国家ip-安装xtables-addons记录
  • Windows配置wsl和docker开发环境
  • 微信小程序实现长按录音,点击播放等功能,CSS实现语音录制动画效果
  • XML通过HTTP POST 请求发送到指定的 API 地址,进行数据回传
  • Android adb shell GPU信息
  • 快速实现一个快递物流管理系统:实时更新与状态追踪
  • Qt for android : 简单实现弹窗创建文件,并使用JNI进行读写实例
  • LeetCode 225: 用队列实现栈
  • 每日学习30分轻松掌握CursorAI:多文件编辑与Composer功能
  • OpenGL利用DDA算法绘制图形,并增加鼠标键盘交互
  • VUE3 监听器(watch)
  • 卷积神经网络:过滤器为啥被叫作“核”
  • 内网服务器添加共享文件夹功能并设置端口映射
  • 【YOLOv5】源码(train.py)
  • 红队攻防 | 凭证获取的10个方法
  • 云计算-操作系统介绍
  • 我这不需要保留本地修改, 只需要拉取远程更改
  • Vue2: el-table为每一行添加超链接,并实现光标移至文字上时改变形状
  • 如何快速准备数学建模?
  • 代码随想录day13| 二叉树理论基础| 递归遍历|迭代遍历| 统一迭代 |层序遍历
  • 第25章 汇编语言--- 信号量与互斥锁
  • 什么是数据分析?
  • asp.net core webapi 并发请求时 怎么保证实时获取的用户信息是此次请求的?
  • 【网络安全 | 漏洞挖掘】通过监控调试模式实现价值$15k的RCE