FluentValidation在C#中是怎么进行数据验证的

介绍

FluentValidation 是一个基于 .NET 开发的验证框架,用于构建强类型验证规则的 .NET 库。开源免费

支持 .Net所有平台 包括.NetFramework和.NetCore.

FluentValidation 组件内提供十几种常用验证器,可扩展性好,支持自定义验证器,支持本地化多语言。

安装

在创建任何验证器之前,您需要在项目中添加对 FluentValidation.dll 的引用。最简单的方法是使用 NuGet 包管理器或 dotnet CLI。

Framework 安装FluentValidation版本

core安装FluentValidation.AspNetCore版本

bb3ffb5b09c8d765aff509ce647b5bd1.png

测试

创建一个用户信息类 包含姓名 性别 年龄

public  class UserInformation{public string Name { get; set; }public string Sex { get; set; }public int Age { get; set; }}

创建用户信息验证器  

public class UserInformationValidator : AbstractValidator<UserInformation>{public UserInformationValidator(){RuleFor(o => o.Name).NotEmpty().WithMessage("姓名不能为空").Length(2,20).WithMessage("姓名长度输入错误");RuleFor(o => o.Sex).NotEmpty().WithMessage("性别输入错误");RuleFor(o => o.Age).GreaterThanOrEqualTo(0).WithMessage("年龄请输入整数").ExclusiveBetween(0, 200).WithMessage("年龄输入错误");}}

 里面写了三个验证方法,

当姓名为空的时候,提示姓名不能为空

当姓名长度不等于2——20的时候提示姓名长度输入错误

当性别为空的时候体术性别输入错误

年龄只能输入整数且年龄范围在0到200;

测试代码,一共写了两种。

 测试一是用户属性全部没有赋值来验证 ;

 测试二是验证用户姓名过长;

static void Main(string[] args){UserInformationValidator validationRules = new UserInformationValidator();//测试1UserInformation userInformation = new UserInformation();var result=   validationRules.Validate(userInformation);var errors = string.Join(Environment.NewLine, result.Errors.Select(x => x.ErrorMessage).ToArray());Console.WriteLine(errors);//测试2UserInformation userInformation2 = new UserInformation();userInformation2.Name = "黑哥聊编程hahahahahahahahahahahahahahah";userInformation2.Age = 10;userInformation2.Sex = "男";var result2 = validationRules.Validate(userInformation2);var errors2 = string.Join(Environment.NewLine, result2.Errors.Select(x => x.ErrorMessage).ToArray());Console.WriteLine(errors2);Console.ReadLine();}

我们看一下输出结果

0b7b7dfe295388e33b941fa10b1bf99d.png

结果表明没有问题 。

大家快去下载试试吧!

最后大家如果喜欢我的文章,还麻烦给个关注,我将会持续输出,走过路过不要错过哈,最后希望net生态圈越来越好!

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

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

相关文章

基于Metronic的Bootstrap开发框架经验总结(5)--Bootstrap文件上传插件File Input的使用...

Bootstrap文件上传插件File Input是一个不错的文件上传控件&#xff0c;但是搜索使用到的案例不多&#xff0c;使用的时候&#xff0c;也是一步一个脚印一样摸着石头过河&#xff0c;这个控件在界面呈现上&#xff0c;叫我之前使用过的Uploadify 好看一些&#xff0c;功能也强大…

软件项目组织管理(七)项目成本管理

文章目录什么是成本什么是项目成本学习曲线理论储备金什么是项目成本管理目的过程成本估算成本估算的工具和技术成本预算主要工作成本估算和成本预算的关系和区别成本管理的工具方法净现值投资回报率挣值分析法什么是成本 为达到一个特定目标而花费的资源。 什么是项目成本 …

大话领域驱动设计——简介

如果说当下最热门的技术概念或架构思想&#xff0c;那么领域驱动设计&#xff08;DDD&#xff09;一定占有一席之地。上个系列&#xff0c;我讲了ABP vNext框架在微服务架构下的落地思路&#xff0c;而ABP vNext是基于DDD思想的完整框架之一&#xff0c;同时DDD也是微服务架构服…

软件项目组织管理(八)项目质量管理

文章目录软件质量的重要性对质量的认识传统的认识新的认识质量与等级什么是质量什么是质量管理什么是软件质量软件项目管理的目标质量管理的过程质量管理发展的四个阶段戴明改进循环&#xff08;PDCA循环&#xff09;项目质量计划编制方法——质量标杆法影响项目质量的因素(5M1…

Avalonia跨平台入门第十九篇之语音播放

在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果、控件的置顶和置底、控件的锁定、自定义Window样式、动画效果、Expander控件、ListBox折叠列表、聊天窗口、ListBox图片消息、窗口抖动、语音发送;今天趁着大周末的时间接着去…

软件项目组织管理(九)项目人力资源管理

文章目录什么是人力资源人力资源的特征什么是项目人力资源管理管理员工的关键所在马斯洛的需求层次理论赫兹伯格的双因素理论权力理论提高项目工作有效性的7种习惯人力资源管理过程人力资源管理的工具方法责任分配矩阵资源负荷资源平衡团队发展的5个阶段&#xff08;塔克曼模型…

javax.jdo.option.ConnectionURL配置的问题

2019独角兽企业重金招聘Python工程师标准>>> Hive安装过程中出现 The reference to entity "createDatabaseIfNotExist" must end with the ; delimiter.问题&#xff0c;具体如下所示&#xff1a; [Fatal Error] hive-site.xml:132:95: The reference to…

设计模式21:State 状态模式(行为型模式)

State 状态模式&#xff08;行为型模式&#xff09; 动机&#xff08;Motivation&#xff09; 在软件构建过程中&#xff0c;某些对象的状态如果改变&#xff0c;其行为也会随之而发生变化&#xff0c;比如文档处于只读状态&#xff0c;其支持的行为和读写状态的行为就可能完全…

在 k8s 以外的分布式环境中使用 Dapr

在Dapr 文档和实践案例中多是推荐采用k8s, 其实我目前也是在k8s 上操作的&#xff0c;有公有云TKE&#xff0c;AKS&#xff0c;还有私有云的Rancher &#xff0c;它并没有传闻中的那么难&#xff0c;而且我认为它非常容易上手。不过&#xff0c;我还是有很多人不愿意使用k8s 。…

javascript原型链中 this 的指向

为了弄清楚Javascript原型链中的this指向问题&#xff0c;我写了个代码来测试&#xff1a; var d {d: 40};var a {x: 10,calculate: function (z) {return this.x this.y z this.d},__proto__:d};var b {y: 20,__proto__: a};var c {y: 30,__proto__: a};运行如下的代码…

Lucene5.5.4入门以及基于Lucene实现博客搜索功能

前言 一直以来个人博客的搜索功能很蹩脚&#xff0c;只是自己简单用数据库的like %keyword%来实现的&#xff0c;所以导致经常搜不到想要找的内容&#xff0c;而且高亮显示、摘要截取等也不好实现&#xff0c;所以决定采用Lucene改写博客的搜索功能。先来看一下最终效果&#x…

都是基于.NET平台,WPF能取代Winform吗?

学Winform还是WPF&#xff1f;很多winform的学者时常在我的技术群咨询要不要学习WPF&#xff1f;我一贯的观点是必须学啊&#xff01;如果是搞工控做cs软件开发&#xff0c;WPF自然是首选。WPF优势在哪里&#xff1f;①前后端分离&#xff1a;WPF是数据驱动的而非Winform的事件…

正确对待生活

三文鱼&#xff0c;国人称为马哈鱼。是一类洄游性鱼类&#xff0c;为常被食用的鱼类之一。主要生活在大西洋及太平洋&#xff0c;在美洲大湖及其他湖可以找到。三文鱼在淡水环境下出生&#xff0c;之后移到海水生长&#xff0c;又会洄游到淡水繁殖。三文鱼会利用太阳和地球磁场…

WPF 实现验证码控件

WPF开发者QQ群此群已满340500857 &#xff0c;请加新群458041663由于微信群人数太多入群请添加小编微信号yanjinhuawechat 或 W_Feng_aiQ 邀请入群需备注WPF开发者 01—代码如下一、创建CheckCode.xaml代码如下。<ResourceDictionary xmlns"http://schemas.microsoft.c…

Mysql数据库性能优化

2019独角兽企业重金招聘Python工程师标准>>> Mysql数据库性能优化&#xff0c;可以从下面三点入手&#xff1a; 数据库设计 SQL语句优化 架构优化 一.数据库设计优化 1.适度的违反范式&#xff0c;适度 遵循三大范式就会带来查询时经常需要join&#xff0c;导致…

4. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识wrk、wrk2

1. 前言上一篇文章我们了解了bombardier&#xff0c;并知道了bombardier.yml与开源项目bombardier的关系&#xff0c;接下来的文章我们了解一下wrk、wrk2&#xff0c;并对比一下它们与bombardier的关系2. 认识wrkwrk是一种现代 HTTP 基准测试工具&#xff0c;能够在单个多核 CP…

dispatchTouchEvent onInterceptTouchEvent onTouchEvent区分

1. dispatchTouchEvent 是处理触摸事件分发,执行super.dispatchTouchEvent(ev)&#xff0c;事件向下分发。 2. onInterceptTouchEvent是ViewGroup提供的方法&#xff0c;默认返回false&#xff0c;返回true表示拦截。 3. onTouchEvent是View中提供的方法&#xff0c;ViewGroup也…

Avalonia跨平台入门第二十篇之语音播放问题

在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果、控件的置顶和置底、控件的锁定、自定义Window样式、动画效果、Expander控件、ListBox折叠列表、聊天窗口、ListBox图片消息、窗口抖动、语音发送、语音播放;今晚加个班来解决…

递归算法浅谈

递归算法 程序调用自身的编程技巧称为递归&#xff08; recursion&#xff09;。   一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法&#xff0c;它通常把一个大型复杂的问题层层转化为一个与原问题类似的规模较小的问题来求解&#xff0c;递归策略仅仅需少量…

ThoughtWorks技术雷达专区

作为一家服务于全球不同类型的IT专业服务公司&#xff0c;ThoughtWorks从未停止过对卓越技术的追求&#xff0c;为此&#xff0c;ThoughtWorks的全球技术委员会(TAB)会定期讨论技术战略&#xff0c;并将其绘制成一份能够体现技术趋势的雷达图&#xff0c;它相当于当下技术领域的…