学习.NET验证模块FluentValidation的基本用法

  开源博客项目Blog .NET中使用FluentValidation验证部分对象实例的属性值,本文学习FluentValidation模块的基本用法,后续再学习Blog .NET项目FluentValidation模块的用法。
  FluentValidation模块支持Linq 表达式,同时支持链式操作;既可以对简单类型的属性进行验证,也支持验证复杂类型属性;既能使用FluentValidation模块内置的验证类,也支持自定义验证方式。
  假设需要对类型A中的部分属性进行验证,定义验证类AValidator,继承自AbstractValidator<AppUser>,同时在AValidator的构造函数中调用RuleFor函数设置验证规则,使用lambda表达式指定要验证的属性,同时调用内置的验证函数进行属性验证,主要包括以下函数:

序号函数名用途
1NotNull属性值不能为null
2NotEmpty属性值不能为null、empty或者空白,如果属性为集合,则集合必须有成员
3NotEqual属性值不能等于指定值
4Equal属性值必须等于指定值
5Length字符串属性长度必须位于指定范围之内
6MaximumLength字符串属性长度不能大于指定值
7MinimumLength字符串属性长度不能小于指定值
8LessThan属性值必须小于指定值
9LessThanOrEqualTo属性值必须小于等于指定值
10GreaterThan属性值必须大于指定值
11GreaterThanOrEqualTo属性值必须大于等于指定值
12Must自定义属性验证方式
13Matches使用正则表达式验证属性值
14EmailAddress属性值必须为电子邮箱格式
15CreditCard属性值必须为信用卡格式
16IsInEnum检查属性值是否为指定枚举类型中的值
17IsEnumName检查字符串属性是否为指定枚举类型中的名词
18Empty属性值必须为空,或者类型的默认值,或者如果属性为集合,则集合不包含成员
19Null属性值须为null
20ExclusiveBetween属性值必须在指定的范围内 ,不包含边界值
21InclusiveBetween属性值必须在指定的范围内,包含边界值
22PrecisionScale检查decimal属性值的精度是否满足要求

  新建Winform项目测试FluentValidation的基本用法,在Nuget包管理器中搜索并安装FluentValidation。
在这里插入图片描述
  定义用户信息类及其验证类,如下所示:

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();}
}

  使用以下代码进行验证,验证结果如下图所示:

AppUser user = new AppUser();
user.UserName = txtName.Text;
user.Age=Convert.ToInt32(txtAge.Text);
user.Email = txtEmail.Text;
user.Sex = comboSex.Text;AppUserValidator validationRules = new AppUserValidator();
FluentValidation.Results.ValidationResult result= validationRules.Validate(user);
if(!result.IsValid)
{MessageBox.Show(result.ToString());
}

在这里插入图片描述

参考文献:
[1]https://docs.fluentvalidation.net/en/latest/index.html#

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

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

相关文章

Ubuntu20.04 安装微信 【优麒麟的镜像源方式安装】

缺点&#xff1a;是网页版本的嵌入&#xff0c;功能少。 推荐wine方式安装&#xff1a;Ubuntu20.04 安装微信 【wine方式安装】推荐 从优麒麟的镜像源安装原生微信 应用下载-优麒麟&#xff5c;Linux 开源操作系统 新建文件software.list sudo vi /etc/apt/sources.list.d/…

操作系统:进程(一)

进程的基本概念 一般的解释是&#xff1a;进程是程序的一个执行实例&#xff0c;是正在执行的程序。我们写的程序编译后是一段二进制的文件。启动的时候加载到系统里面执行&#xff0c;就是以进程的形式执行。也就是说&#xff0c;我们编译后的可执行程序是一个静态的概念&…

【数据结构】树与二叉树(二十):树获取大儿子、大兄弟结点的算法(GFC、GNB)

文章目录 5.1 树的基本概念5.1.1 树的定义5.1.2 森林的定义5.1.3 树的术语 5.2 二叉树5.3 树5.3.1 树的存储结构1. 理论基础2. 典型实例3. Father链接结构4. 儿子链表链接结构5. 左儿子右兄弟链接结构 5.3.2 获取结点的算法1. 获取大儿子结点的算法&#xff08;GFC&#xff09;…

为什么软件公司很少用Python开发Web项目?

实际上&#xff0c;Python在Web开发方面有着广泛的应用&#xff0c;许多软件公司也确实使用Python来开发Web项目。 Python拥有诸如Django、Flask等流行的Web框架&#xff0c;这些框架使得开发者能够迅速、高效地开发出Web应用。 然而&#xff0c;Python在Web开发中的使用可能会…

利用 Pandoc + ChatGPT 优雅地润色论文,并保持 Word 公式格式:Pandoc将Word和LaTeX文件互相转化

论文润色完美解决方案&#xff1a;Pandoc 与 ChatGPT 的强强联合 写在最前面其他说明 一、通过 Pandoc 将 Word 转换为 LaTeX 的完整指南步骤 1: 安装 PandocWindows:macOS:Linux: 步骤 2: 准备 Word 文档步骤 3: 转换文档步骤 4: 检查并调整输出步骤 5: 编译 LaTeX 文档总结 二…

图新地球地图导入操作步骤

1、下载图源&#xff0c;如下&#xff1a; 2、将其全部复制或部分复制&#xff0c;然后回到桌面&#xff0c;打开文件所在位置&#xff0c;如下&#xff1a; 3、将复制的数据粘贴到文件夹下&#xff0c;具体如下&#xff1a; 4、复制到路径如下&#xff1a; 5、复制结果如下&am…

应用场景丨迭代市政综合管廊监测系统建设

市政综合管廊是指在城市地下建造的隧道空间&#xff0c;将市政、电力、通讯、燃气、给排水等各种管线集于一体&#xff0c;实施统一规划、设计、建设和管理。综合管廊有利于解决反复开挖路面、架空线网密集、管线事故频发等问题&#xff0c;是保障城市运行的重要基础设施和“生…

OpenGL 坐标投影与反投影(Qt)

文章目录 一、简介1.1投影1.2反投影二、应用代码三、实现效果参考资料一、简介 在学习OpenGL一段时间之后,我们都会了解坐标的转换过程,如下图所示: 1.1投影 正如图中所述,OpenGL将一个3D坐标投影到一个2D空间主要有以下几个步骤,这也是我们比较熟知的几个步骤: 现实局部…

ElasticSearch快速入门

一、全文检索 1、什么是全文检索 全文索引是一种通过对文本内容进行全面索引和搜索的技术。它可以快速的在大量文本数据中查找包含特定关键词或短语的文档&#xff0c;并返回相关的搜索结果。 全文检索广泛应用于各种信息管理系统和应用中&#xff0c;如搜索引擎、文档管理系…

三十一、W5100S/W5500+RP2040树莓派Pico<TCP_Server多路socket>

文章目录 1 前言2 简介2. 1 使用多路socket的优点2.2 多路socket数据交互原理2.3 多路socket应用场景 3 WIZnet以太网芯片4 多路socket设置示例概述以及使用4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 结果演示 5 注意事项6 相关链接 1 前言 W5100S/W5500是一…

并发编程(多线程)-可见性、有序性、原子性问题

目录 可见性 可见性概念 可见性演示 小结 原子性 原子性概念 原子性演示 小结 有序性 有序性概念 有序性演示 小结 可见性 可见性概念 可见性&#xff08;Visibility&#xff09;&#xff1a;是指一个线程对共享变量进行修改&#xff0c;另一个先立即得到修改后的…

Python------列表 集合 字典 推导式(本文以 集合为主)

推导式&#xff1a; 推导式comprehensions&#xff08;又称解析式&#xff09;&#xff0c;是Python的一种独有特性。推导式是可以从一个数据序列 构建 另一个 新的数据序列&#xff08;一个有规律的列表或控制一个有规律列表&#xff09;的结构体。 共有三种推导&#xff…