学习.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.mzph.cn/news/147377.shtml

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

相关文章

element ui修改select选择框背景色和边框色

一、修改时间输入框的背景和边框字体颜色 <div class"hright"><el-date-picker :popper-append-to-body"false" class"custom-timeselect" v-model"form.timevalue" type"daterange" range-separator"至"…

qt-C++笔记之treeWidget初次使用

qt-C笔记之treeWidget初次使用 code review! 文章目录 qt-C笔记之treeWidget初次使用1.运行2.文件结构3.main.cpp4.widget.h5.widget.cpp6.widget.ui7.main.qrc8.qt_widget_test.pro9.options.png 1.运行 2.文件结构 3.main.cpp 代码 #include "widget.h"#include…

【C++】进阶模板

非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 非类型形参&#xff1a;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数当成常量来使…

Android 14 Beta 1

Android 14的第一个 Beta 版&#xff0c;围绕隐私、安全、性能、开发人员生产力和用户定制等核心主题构建&#xff0c;同时继续改进平板电脑、可折叠设备等大屏幕设备的体验。我们一直在完善 Android 14 的功能和稳定性方面取得稳步进展&#xff0c;现在是时候向开发者和早期采…

论文笔记——BiFormer

Title: BiFormer: Vision Transformer with Bi-Level Routing AttentionPaper: https://arxiv.org/pdf/2303.08810.pdfCode: https://github.com/rayleizhu/BiFormer 一、前言 众所周知&#xff0c;Transformer相比于CNNs的一大核心优势便是借助自注意力机制的优势捕捉长距离…

基于STM32的外部中断(EXTI)在嵌入式系统中的应用

外部中断&#xff08;External Interrupt&#xff0c;EXTI&#xff09;是STM32嵌入式系统中常见且重要的功能之一。它允许外部事件&#xff08;例如按键按下、传感器触发等&#xff09;通过适当的引脚触发中断&#xff0c;从而应用于各种嵌入式系统中。在STM32微控制器中&#…

Vulkan渲染引擎开发教程 一、开发环境搭建

一 安装 Vulkan SDK Vulkan SDK 就是我们要搞的图形接口 首先到官网下载SDK并安装 https://vulkan.lunarg.com/sdk/home 二 安装 GLFW 窗口库 GLFW是个跨平台的小型窗口库&#xff0c;也就是显示窗口&#xff0c;图形的载体 去主页下载并安装&#xff0c;https://www.glfw.…

【自然语言处理(NLP)实战】LSTM网络实现中文文本情感分析(手把手与教学超详细)

目录 引言&#xff1a; 1.所有文件展示&#xff1a; 1.中文停用词数据&#xff08;hit_stopwords.txt)来源于&#xff1a; 2.其中data数据集为chinese_text_cnn-master.zip提取出的文件。点击链接进入github&#xff0c;点击Code、Download ZIP即可下载。 2.安装依赖库&am…

Spring 事务和事务传播机制

一、再谈事务 到这里 JavaEE 的学习基本是已经接近了尾声&#xff0c;相信大家对事务已然有了一些理解。当然这里我们还是简单的说明一下&#xff1a; 事务就是将一组操作封装成一个执行单元&#xff0c;要么全部成功&#xff0c;要么全部失败。比较典型的应用场景是转账&…

Vite - 配置 - 文件路径别名的配置

为什么要配置别名 别名的配置&#xff0c;主要作用是为了缩短代码中的导入路径。例如有如下的项目目录&#xff1a; project-name| -- src| -- a| --b| --c| --d| --e| -- abc.png| -- index.html| -- main.js如果想在 main.js 文件中使用 abc.png ,则使用的路径是 &#xff1…

二元分类模型评估方法

文章目录 前言一、混淆矩阵二、准确率三、精确率&召回率四、F1分数五、ROC 曲线六、AUC&#xff08;曲线下面积&#xff09;七、P-R曲线类别不平衡问题中如何选择PR与ROC 八、 Python 实现代码混淆矩阵、命中率、覆盖率、F1值ROC曲线、AUC面积 指标 公式 意义 真正例 (TP)被…

DNS1(Bind软件)

名词解释 1、DNS&#xff08;Domain Name System&#xff09; DNS即域名系统&#xff0c;它是一个分层的分布式数据库&#xff0c;存储着IP地址与主机名的映射 2、域和域名 域为一个标签&#xff0c;而有多个标签域构成的称为域名。例如hostname.example.com&#xff0c;其…

gRPC 的原理 介绍带你从头了解gRPC

gRPC 的原理 什么是gRPC gRPC的官方介绍是&#xff1a;gRPC是一个现代的、高性能、开源的和语言无关的通用 RPC 框架&#xff0c;基于 HTTP2 协议设计&#xff0c;序列化使用PB(Protocol Buffer)&#xff0c;PB 是一种语言无关的高性能序列化框架&#xff0c;基于 HTTP2PB 保…

Sentinel 流控规则

Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 SpringbootDubboNacos 集成 Sentinel&…

实用技巧:在C和cURL中设置代理服务器爬取www.ifeng.com视频

概述&#xff1a; 网络爬虫技术作为一种自动获取互联网数据的方法&#xff0c;在搜索引擎、数据分析、网站监测等领域发挥着重要作用。然而&#xff0c;面对反爬虫机制、网络阻塞、IP封禁等挑战&#xff0c;设置代理服务器成为解决方案之一。代理服务器能够隐藏爬虫的真实IP地…

Word中NoteExpress不显示的问题

首先确认我们以及安装了word插件 我们打开word却没有。此时我们打开&#xff1a;文件->选项->加载项 我们发现被禁用了 选择【禁用项目】&#xff08;如果没有&#xff0c;试一试【缓慢且禁用的加载项】&#xff09;&#xff0c;点击转到 选择启用 如果没有禁用且没有出…

C++加持让python程序插上翅膀——利用pybind11进行c++和python联合编程示例

目录 0、前言1、安装 pybind11库c侧python侧 2、C引入bybind11vs增加相关依赖及设置cpp中添加头文件及导出模块cpp中添加numpy相关数据结构的接收和返回编译生成dll后改成导出模块同名文件的.pyd 3、python调用c4、C引入bybind11 0、前言 在当今的计算机视觉和机器学习领域&am…

CSDN每日一题学习训练——Python版(简化路径,不同的二叉搜索树)

版本说明 当前版本号[20231116]。 版本修改说明20231116初版 目录 文章目录 版本说明目录简化路径题目解题思路代码思路参考代码 不同的二叉搜索树题目解题思路代码思路参考代码 简化路径 题目 给你一个字符串 path &#xff0c;表示指向某一文件或目录的 Unix 风格 绝对路…

Mysql数据库 16.SQL语言 数据库事务

一、数据库事务 数据库事务介绍——要么全部成功要么全部失败 我们把完成特定的业务的多个数据库DML操作步骤称之为一个事务 事务——就是完成同一个业务的多个DML操作 例&#xff1a; 数据库事务四大特性 原子性&#xff08;A&#xff09;&#xff1a;一个事务中的多个D…

(三)什么是Vite——Vite 主体流程(运行npm run dev后发生了什么?)

vite分享ppt&#xff0c;感兴趣的可以下载&#xff1a; ​​​​​​​Vite分享、原理介绍ppt 什么是vite系列目录&#xff1a; &#xff08;一&#xff09;什么是Vite——vite介绍与使用-CSDN博客 &#xff08;二&#xff09;什么是Vite——Vite 和 Webpack 区别&#xff0…