首页 > 其他分享 >2、数据验证组件框架:FluentValidation for .NET - 开源项目研究文章

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

时间:2025-01-11 15:21:31浏览次数:1  
标签:Core ASP 验证 FluentValidation person 开源 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/#

标签:Core,ASP,验证,FluentValidation,person,开源,NET
From: https://www.cnblogs.com/lzhdim/p/18335235

相关文章

  • AI开源整合包
    项目B站视频下载地址解压密码FaceFusion3.1.1-AI换脸[Github地址]FaceFusion3.1.1换脸最新版本,支持表情编辑,图片&视频换脸,画质增强,禁用了内容检测,全中文汉化,一键本地部署整合包,解压即用[夸克网盘]提取码:无[百度网盘]暂无提取码:无无C......
  • 阿里开源项目Arthas,java开源诊断工具使用教程
    摘要:最近在项目中遇到一个问题,客户那边部署的项目线上出现了问题,需要远程调试,单凭log日志很难判断问题出现的原因,且无法进行远程debug调。,一开始是通过加日志的方式去排查问题,但日志加上之后还需要重新部署,这样来来回回部署了好几次,这方案非常浪费时间。了解到Arthas开源工具可以......
  • 图像识别-迁移学习-AlexNet-AlexNet源码
    文章目录迁移学习深度学习框架中可用的分类预训练模型AlexNettransforms.ToTensor()**`transforms.ToTensor()`的作用****1.为什么需要`ToTensor()`?****2.`ToTensor()`转换内容****输入数据类型****输出****注意:通道顺序****3.示例代码****3.1转换PIL图片****......
  • C# .netframework 4.5 下的 lock 语法 已经够用了,挺安全的。
    如果你在一个线程里用lock语法 锁住了某段数据,当外部粗暴的abort或interrupt这个线程后,退出线程前,这个lock会自动释放了。我做了一个简单的例子来模拟情况,先是写了一个类Class2,里面有一个int_count用来在线程间互斥的修改,用一个_locker来保护。提供了四个方法:s......
  • CPP-Net模型详解
    模型背景在细胞核分割领域,早期的研究主要依赖于基于形状模型和基于图割的方法。这些传统方法虽然能在一定程度上解决问题,但存在显著局限性:基于形状模型的方法需要预先定义形状模板,难以适应多样化的细胞核形态;基于图割的方法虽能较好处理重叠细胞核,但计算复杂度高,运......
  • 破解 Kubernetes 身份验证 (AuthN)模型
                       大家读完觉得有帮助和意义记得关注和点赞!!!这篇文章深入探讨了Kubernetes身份验证(AuthN)模型。具体说来我们将从分析Kubernetes中AuthN的技术需求开始,然后设计一个对于它(假设它还没有),最终解决方案有一个端......
  • netplan apply报错No module named ‘netifaces‘
    Ubuntu20.04.5LTS\n\l,ctrl+alt+f2切换字符登录f1切换图形处理办法:root登录执行root@node37:/disk1/Qwen2.5-72B-Instruct-GPTQ-Int4#cat/etc/netplan/01-network-manager-all.yaml #LetNetworkManagermanagealldevicesonthissystemnetwork: version:2......
  • In‐band Network Telemetry
    #卫星#遥测技术#INT一、INT是什么?INT,In‐bandNetworkTelemetry,带内网络遥监测。telemetry,英文原意是遥测技术。从其英文名称可以了解如下:a.In-band,说明监测指令及数据均在带内传输b.telemetry,说明是长距离,远程获取网络数据的方法。想象一下卫星在天上飞,地面遥测监控的......
  • 无需昂贵GPU:本地部署开源AI项目LocalAI在消费级硬件上运行大模型
    无需昂贵GPU:本地部署开源AI项目LocalAI在消费级硬件上运行大模型随着人工智能技术的快速发展,越来越多的AI模型被广泛应用于各个领域。然而,运行这些模型通常需要高性能的硬件支持,特别是GPU(图形处理器),这往往导致较高的成本门槛。为了打破这一限制,开源AI项目LocalAI提供了一种......
  • Word 转成pdf及打印的开源方案支持xp
    Word转成pdf、打印的方案几乎没有免费开源的方案,现在提供一个通过LibreOffice实现的方案操作依赖LibreOffice需要安装,点此下载老版本5.4.7.2是最后一个支持xp的版本如需xp要请安装此版本LibreOffice官方介绍LibreOffice是一款开放源代码的自由免费全能办公软件,可运行于M......