好用的验证框架FluentValidation(上)

把数据错误扼杀在早期,那就是在数据的入口处,一般数据都是打包成一个实体的方式进传递,FluentValidation就以实体类为单位进行属性验证的集合。

Install-Package FluentValidation

下面看一个例子吧。

实体类:

public class Person
{public int Id { get; set; }public DateTime Birthday { get; set; }public string IDCard { get; set; }public string Name { get; set; }public string Email { get; set; }public PersonAddress Address { get; set; }public string Tel { get; set; }
}
public class PersonAddress
{public string Country { get; set; }public string Province { get; set; }public string City { get; set; }public string County { get; set; }public string Address { get; set; }public string Postcode { get; set; }
}

验证实体类:

/// <summary>
/// Person验证
/// </summary>
public class PersonValidator : AbstractValidator<Person>
{public PersonValidator(){RuleFor(p => p.Name).NotNull();RuleFor(p => p.Email).NotNull().EmailAddress();RuleFor(p => p.Birthday).NotNull();RuleFor(p => p.IDCard).NotNull().When(p => (DateTime.Now > p.Birthday.AddYears(1))).WithMessage(p => $"出生日期为{p.Birthday},现在时间为{DateTime.Now},大于一岁,CardID值必填!");RuleFor(p => p.Tel).NotNull().Matches(@"^(\d{3,4}-)?\d{6,8}$|^[1]+[3,4,5,8]+\d{9}$");RuleFor(p => p.Address).NotNull();RuleFor(p => p.Address).SetValidator(new PersonAddressValidator());}
}
/// <summary>
/// Person Address验证
/// </summary>
public class PersonAddressValidator : AbstractValidator<PersonAddress>
{public PersonAddressValidator(){RuleFor(a => a.Country).NotNull();RuleFor(a => a.Province).NotNull();RuleFor(a => a.City).NotNull();RuleFor(a => a.County).NotNull();RuleFor(a => a.Address).NotNull();RuleFor(a => a.Postcode).NotNull().Length(6);}
}

使用场景:

class Program
{static void Main(string[] args){var person = new Person(){//少一位Tel = "1345346711",Name = "桂素伟",//格式错误Email = "axzxs2001#163.com",//设置生日,没有身份证Birthday = DateTime.Parse("2020-03-28 00:00:00"),Address = new PersonAddress(){//邮编位数不对Postcode = "12345"},};var validator = new PersonValidator();var results = validator.Validate(person);if (!results.IsValid){foreach (var failure in results.Errors){Console.WriteLine("属性 " + failure.PropertyName + " 验证失败:" + failure.ErrorMessage);}}Console.WriteLine("--------------------------------------------------------------------");Console.WriteLine(results.ToString("\r\n"));}
}

FluentValidation有一个很赞的功能,就是验证某一属性时,可以用别的属性的值作为条件,组合实现验证,这样就能适应更多的业务逻辑验证场景。比如上例中的,只有大于一岁(Birthday)的人,身份证(IDCard)是必填项。当然FluentValidation不只这些功能,比如嵌套实体验证,组合验证规则等,都是很贴心的功能,期待大家尝试。

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

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

相关文章

10G 职场晋升/IT干货/生活技能/理财秘籍 【全套】学习资料免费送!

你的同龄人正在抛弃你&#xff0c;大学毕业后五年&#xff0c;你就会发现&#xff0c;同龄人之间的差距已经是云泥之别。当年一起追剧&#xff0c;一起逃课&#xff0c;一起吹牛的同学&#xff0c;有人已经年薪百万&#xff0c;有人还在抢两块钱的红包。有人去过许多国家&#…

iNeuOS工业互联平台,发布消息管理、子用户权限管理、元件移动事件、联动控制、油表饼状图和建筑类设备驱动,v3.4版本...

目 录1. 概述... 22. 平台演示... 23. 消息管理... 24. 子用户权限管理... 35. 元件移动事件... 36. 联动控制... 47. 增加油表和饼图... 58. 增加住建部DL/T645和智能液位计协议驱动1. 概述发布iNeuOS 3.4版本&#xff0c;主…

程序猿看段子,越看越心碎!

程序员整天面对代码&#xff0c;压力一定很大吧~小编表示应该时不时也给你们来点段子&#xff0c;增加一下生活的乐趣&#xff0c;让你们看到希望的曙光...今天整理的10个段子&#xff0c;你们绝对喜欢。看看就知道啦&#xff01;【一直有人问我&#xff0c;程序员应该看什么书…

mysql写入监控_zabbix 自定义key 监控mysql增删查改

vim /etc/zabbix/zabbix_agentd.d/mysql.conf##zabbix_agentd.d在这个文件夹下的.conf,都会被agent读取&#xff0c;我们这里新建的一个配置文件方便使用&#xff0c;这样就不需要去动主配置文件了UserParameterecho[*],echo "$1"#要传递参数要带[*]&#xff0c;且ke…

自制H3C交换机CONSOLE线

单位有一台H3C S3600交换机&#xff0c;手痒痒的想进入玩一下。 从网上查得&#xff0c;连接CONSOLE接口用的是串口&#xff0c;只不过用RJ45水晶头插入而已。 山高路远&#xff0c;囊中羞涩&#xff0c;刚好手头上有一个文曲星的连接线&#xff0c;串口的。 凭自己半桶水的电子…

5月份Github上最热门的数据科学和机器学习项目

GitHub最近以数十亿美元的交易被微软收购。GitHub一直是开发人员之间协作的终极平台&#xff0c;我们已经看到数据科学和机器学习社区同样非常需要它&#xff0c;因此&#xff0c;我们希望GitHub能在微软的保护下继续发展下去。在本月排行中&#xff0c;上榜的项目有英特尔开源…

Blazor 中如何下载文件到浏览器

Blazor 中如何下载文件到浏览器目录一、前言二、方法一&#xff08;导航跳转&#xff09;三、方法二&#xff08;下载后传出&#xff09;(一) 使用 RestSharp 下载(二) 使用 BlazorDownloadFile 传出独立观察员 2021 年 3 月 28 日一、前言最近想给之前文章《下载中转加速器 VP…

荐书 | 5本数学科普让你不再“畏惧”数学,感受数学的内在美

最近&#xff0c;小木了解了许多关于数学的书籍&#xff0c;简直打开了小木数学新世界的大门。出版社寄了一些样书给小木&#xff0c;经过斟酌对比之后&#xff0c;推荐以下5本数学科普书给大家。01《数学简史》[中] 蔡天新 43.50提到数学&#xff0c;很多人的第一反应就是复杂…

ASP.NET Core依赖注入初识与思考

一、前言在上一篇中&#xff0c;我们讲述了什么是控制反转(IoC)以及通过哪些方式实现的。这其中&#xff0c;我们明白了&#xff0c;「控制反转&#xff08;IoC&#xff09;」 是一种软件设计的模式&#xff0c;指导我们设计出更优良&#xff0c;更具有松耦合的程序&#xff0c…

memcached mysql缓存_memcached做数据库缓存

最近研究memcache小有成果&#xff0c;把经验分享出来。白话:很早就听说memcache了&#xff0c;一直没搞懂&#xff0c;后来又看到redis很火&#xff0c;可以用来做缓存&#xff0c;研究了半天也没搞懂咋个做缓存&#xff0c;后来也不纠结了&#xff0c;继续学习python,当对pyt…

掌握Python爬虫基础,仅需1小时!

随着互联网的发展&#xff0c;google、百度等搜索引擎让我们获取信息愈加方便。但需求总会不断涌现&#xff0c;纯粹地借助百度等收集信息是远远不够的&#xff0c;因此编写爬虫爬取信息的重要性就越发凸显。比如有人为了炒股&#xff0c;专门爬取了多种股票信息&#xff1b;也…

我看ITIL在中国(六):如何建立有中国特色的IT运维管理平台【二】

在开始筹划建设有“中国特色的IT运维管理平台”之前&#xff0c;先来看看我们目前面临的情况&#xff1a; 随着信息化建设的不断深入&#xff0c;各种企业的核心业务都逐步地迁移到IT平台上来&#xff0c;对IT管理的要求也越来越高&#xff0c;IT需要管理&#xff0c;向IT管理要…

史上首次!世界杯使用视频裁判

2018年6月16日18时&#xff0c;法国队在喀山中央球场迎来了他们本届世界杯的首场比赛&#xff0c;对手是澳大利亚队。比赛进行到第56分钟&#xff0c;格列兹曼接到队友的直塞球&#xff0c;单刀杀入禁区&#xff0c;澳大利亚后卫里斯登铲球&#xff0c;但并没有碰到皮球&#x…

二分查找和折半插入排序一块说说-很合适~~~

前言上一篇在聊时间复杂度和空间复杂度时&#xff0c;没有按指定格式显示(明明预览的时候没问题的)&#xff0c;强迫症的我稍微优化了一下重新发布&#xff0c;目的就是让小伙伴看着舒服。上次聊到的直接插入排序在比较有序数据和待插入数据时&#xff0c;是通过依次遍历的方式…

用Python更加了解微信好友

用了微信几年了&#xff0c;微信号有也不少了&#xff0c;但是真正了解自己的好友吗&#xff1f;好友最多的城市是哪个&#xff1f;好友男女比例是多少&#xff1f;好友签名都是什么&#xff1f;今天我们来充分了解自己的微信好友。运行平台&#xff1a; Windows Python版本&a…

Linux下配置DNS

Linux下配置DNS一、配置环境1.Linux操作系统版本&#xff1a;RedHat AS 52.网络环境设置&#xff1a;IP&#xff1a;192.168.1.1 NetMark&#xff1a;255.255.255.0 Getway&#xff1a;192.168.1.13.软件包的准备&#xff1a;1&#xff09;bind-9.3.3-7.el5.i386.rpm …

python用pandas提取行列_python- pandas 不删除符合条件的行和列

我正在尝试建立一个回归模型,以便根据出现的单词来预测收视率(1-5)(回归本身并不一定表现良好,更多的是关于所采用的方法).我使用以下代码创建了一个词频矩阵&#xff1a;bow df.Review2.str.split().apply(pd.Series.value_counts)看起来像这样&#xff1a;我现在有兴趣删除在…

中国宜坚持发展自主操作系统

一直以来&#xff0c;我国IT产业存在“缺芯少魂”的问题&#xff0c;芯指的是芯片&#xff0c;魂指的是操作系统。操作系统是连接硬件和应用软件的媒介和桥梁。如果无法在操作系统方面实现安全可控&#xff0c;整个信息安全就无从谈起&#xff0c;而恰恰当下国内桌面操作系统市…

老板啥都懂,还天天套路我?!

今天我被老板叫到办公室进行了一场“推心置腹”的对话▼来源&#xff1a;特大号文章版权归原作者所有&#xff0c;转载仅供学习使用&#xff0c;不用于任何商业用途&#xff0c;如有侵权请留言联系删除&#xff0c;感谢合作。

如何提高电脑办公效能

其实你只要花一点点的时间&#xff0c;就可以使你的生活变得更好。在电脑办公上&#xff0c;记忆几个快捷键、安装一些实用的软件等绝对会让你的效率翻倍&#xff01; 在此弥缝分享几条我常常使用到的技巧和软件&#xff1a; 熟练一些快捷键 熟练的快捷键越多&#xff0c;做事越…