学习.NET验证模块FluentValidation的基本用法(续3:ASP.NET Core中的调用方式)

  FluentValidation模块支持在ASP.NET Core项目中进行手工或自动验证,主要验证方式包括以下三种:
  1)手工注册验证类,并在控制器或其它模块中调用验证;
  2)基于ASP.NET验证管道(validation pipeline)自动验证;
  3)基于过滤器自动验证。

  定义以下数据类及验证类,学习并测试上述三种验证方式:

//数据类及验证类定义
public class AppUser
{public string UserName { get; set; }public string Sex { get; set; }public int Age { get; set; }public string Email { get; set; }
}public class AppUserValidator : AbstractValidator<AppUser>
{public AppUserValidator(){RuleFor(r => r.UserName).NotEmpty().WithMessage("姓名不能为空");RuleFor(r => r.Age).GreaterThan(10).WithMessage("年龄必须超过10岁");RuleFor(r => r.Email).EmailAddress();}
}

  首先是手工注册及验证,新建WebApi项目,在Program文件中手工注册验证接口及对应验证类,然后在控制器中调用验证,示例代码及效果如下所示。除了手工注册,FluentValidation还提供自动注册函数,不需要手工逐个注册,详细介绍见下面代码中的注释。

//program.cs中注册
//这里也可以安装FluentValidation.DependencyInjectionExtensions包,然后
//在program.cs中调用builder.Services.AddValidatorsFromAssemblyContaining<AppUserValidator>();
//AddValidatorsFromAssemblyContaining函数会将AppUserValidator所在程序集中
//所有继承自IValidator的验证类自动注册
builder.Services.AddScoped<IValidator<AppUser>, AppUserValidator>();//controller类中使用
public class UserController : ControllerBase
{private readonly IValidator<AppUser> _user;  public UserController(IValidator<AppUser> user){_user = user;}[HttpPost]public string NewUser(AppUser user) {FluentValidation.Results.ValidationResult result= _user.Validate(user);if (result.IsValid) {return "验证成功";}else{return result.ToString();}}
}

在这里插入图片描述
  第二种方式是基于ASP.NET验证管道自动验证,但FluentValidation官网文档中已不推荐这种方式,原因包括以下几点:
  a)ASP.NET验证管道不支持异步,如果验证类中有异步操作,则验证类无法执行且会抛异常;
  b)验证管道仅支持MVC和Razor,不支持Minimal APIs、Blazor等;
  c)难以调试。自动验证模式难以调试程序问题。

  基于ASP.NET验证管道自动验证时,只需在Program文件中调用AddFluentValidationAutoValidation函数(需安装FluentValidation.AspNetCore包)并注册验证接口及对应验证类即可。ASP.NET Core项目在调用控制器函数前会自动调用验证类进行验证。示例代码及运行效果如下所示:

//program.cs中注册
builder.Services.AddFluentValidationAutoValidation();
builder.Services.AddValidatorsFromAssemblyContaining<AppUserValidator>();

在这里插入图片描述

  基于过滤器自动验证 需安装SharpGrip.FluentValidation.AutoValidation 包(详细介绍见参考文献3),该包的使用方式和基于ASP.NET验证管道自动验证类似,只需在program文件中添加相应函数即可,示例代码如下所示:

//program.cs中注册
using SharpGrip.FluentValidation.AutoValidation.Mvc.Extensions;builder.Services.AddFluentValidationAutoValidation();
builder.Services.AddValidatorsFromAssemblyContaining<AppUserValidator>();

在这里插入图片描述
参考文献:
[1]https://docs.fluentvalidation.net/en/latest/start.html
[2]https://github.com/FluentValidation/FluentValidation.AspNetCore#aspnet-core-integration-for-fluentvalidation
[3]https://github.com/SharpGrip/FluentValidation.AutoValidation

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/221699.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

COMP2121 Discrete Mathematics

COMP2121 Discrete Mathematics 需要可WeChat: zh6-86

Java 注解在 Android 中的使用场景

Java 元注解有 5 种&#xff0c;常用的是 Target 和 Retention 两个。 其中 Retention 表示保留级别&#xff0c;有三种&#xff1a; RetentionPolicy.SOURCE - 标记的注解仅保留在源码级别中&#xff0c;并被编译器忽略RetentionPolicy.CLASS - 标记的注解在编译时由编译器保…

【C++高阶(五)】哈希思想--哈希表哈希桶

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 哈希结构 1. 前言2. unordered系列容器3. 哈希概…

EM32DX-C1【分布式io】

1设备类型&#xff1a; 电压&#xff1a;DC24V 输入16点 输出16点雷赛 EM32DX-C1 模块是一款基于 ASIC 技术的高性能、高可靠性的 CANopen 总线数字 量输入输出扩展模块&#xff0c;具有 16 路通用输入接口和 16 路通用输出接口。输入输出接口均采用光 电隔离和…

手机爬虫用Fiddler详细教程

如果你正在进行手机爬虫的工作&#xff0c;那么一款强大而又实用的网络调试工具Fiddler将会是你的好帮手。今天&#xff0c;我将和大家分享一份详细的Fiddler教程&#xff0c;教你如何使用它来轻松捕获和分析手机App的网络请求。让我们一起来探索Fiddler的功能和操作&#xff0…

visual Studio MFC 绘制单一颜色三角形、渐变颜色边框三角形、渐变填充三角形、边框渐变的正方形与填充渐变的正方形实例

MFC 绘制三角形 本文使用visual Studio MFC 平台实现绘制单一颜色三角形、渐变颜色边框三角形、渐变填充三角形、边框渐变的正方形与填充渐变的正方形. 关于基础工程的创建请参考Visual Studio 使用MFC 单文档工程绘制单一颜色直线和绘制渐变颜色的直线 文章目录 MFC 绘制三角形…

IO和NIO的区别 BIO,NIO,AIO 有什么区别? Files的常用方法都有哪些?

文章目录 IO和NIO的区别BIO,NIO,AIO 有什么区别?Files的常用方法都有哪些&#xff1f; 今天来对java中的io, nio, bio, aio进行了解&#xff0c;有何区别。 IO和NIO的区别 NIO与IO区别 IO是面向流的&#xff0c;NIO是面向缓冲区的Java IO面向流意味着每次从流中读一个或多个字…

《经济学人》深度解析之OpenAI董事会风波

上周全球最受瞩目的财经事件莫过于如日中天的OpenAI董事会风波所带来的反转之反转剧情。 故事的结局相信大家都已知悉&#xff1a;OpenAI在开除创始人山姆奥特曼&#xff08;Sam Altman&#xff09;几天后&#xff0c;重新任命他为首席执行官&#xff0c;并成立了一个新的董事…

linux LVM /dev/sdb mount dir /data【linux LVM 磁盘挂载目录】

添加磁盘 /dev/sdb rootregistry01 ~]# fdisk -lDisk /dev/sda: 53.7 GB, 53687091200 bytes, 104857600 sectors Units sectors of 1 * 512 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk lab…

机器学习(1)机器学习类型和机器学习的主要概念

0.前提 深度学习&#xff08;Deep Learing&#xff09;是机器学习&#xff08;Machine Learning&#xff09;领域中的一个新的研究方向&#xff0c;在如今的时代研究深度学习的大模型是十分热门的。我不知道有多少人有关注到最近openai的事件啊&#xff0c;说个比较让我惊讶的…

系列十八、Spring bean线程安全问题

一、概述 我们知道Spring中的bean&#xff0c;默认情况下是单例的&#xff0c;那么Spring中的bean是线程安全的吗&#xff1f;这个需要分情况考虑&#xff0c;bean中是否存在成员变量&#xff1f;bean中的成员变量是怎么处理的&#xff1f;...&#xff0c;针对bean的状态会有不…

FaceChain集成最强开源SDXL,生成人像质感拉满!

一、介绍 FaceChain&#xff0c;一款备受欢迎的AI写真开源项目&#xff0c;目前已与最强大的开源生图模型SDXL完美融合&#xff01;这将为用户带来前所未有的高质量AI写真体验。 FaceChain是一个可以用来打造个人数字形象的深度学习模型工具。用户仅需要提供最低一张照片即可获…