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;功能也强大…

查看某个端口是否链接超时

def curl_tyt(port):bufcStringIO.StringIO()ccpycurl.Curl()cc.setopt(cc.URL,http://10.67.21.11)cc.setopt(cc.WRITEFUNCTION,buf.write)cc.setopt(cc.CONNECTTIMEOUT,5)cc.setopt(cc.TIMEOUT,8)cc.setopt(cc.PROXY,http://10.67.21.11:%s%port)cc.perform()转载于:https://…

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

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

linux之lsof查看端口占用情况

1、lsof解释 lsof&#xff0c;它对应于“list open files”&#xff08;列出打开的文件&#xff09; 2、losf查看端口占用情况 lsof -i:port

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

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

DOCKER存储驱动之DEVICE MAPPER简介

Device Mapper是一个基于kernel的框架&#xff0c;它增强了很多Linux上的高级卷管理技术。Docker的devicemapper驱动在镜像和容器管理上&#xff0c;利用了该框架的超配和快照功能。为了区别&#xff0c;本文使用Device Mapper指驱动中的框架&#xff0c;而devicemapper指Docke…

easyui datagrid plunges 扩展 插件

项目使用 springmvc4.x spring4.x hibernate4.x easyui 为了便于开发&#xff0c;扩展了easyui 的 datagrid 功能&#xff0c;下面直接贴上扩展代码&#xff1a; /*** context 指定为 项目上下文* index 如果定义多组dataGrid&#xff0c;index指定为对应的参数&#xff1a;一…

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

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

Ctrl与Caps Lock键的交换

转自&#xff1a;http://www.xiaozhou.net/exchange_ctrl_and_capslock_key-2012-07-20.html 感谢博主。 要换就把所有电脑的键位都换过来&#xff0c;不然反而容易出错。 转载记录一下&#xff0c;防止以后重装系统转载于:https://www.cnblogs.com/bugtags/p/4775886.html

最近的状态

现在都25岁了&#xff0c;马上要26岁了&#xff0c;最近人特别浮躁&#xff0c;什么都不想学&#xff0c;什么都不想做&#xff0c;感觉整个人都不在状态&#xff0c;这样下去肯定会被淘汰&#xff0c;调整好心态&#xff0c;调整好状态&#xff0c;冷静下来&#xff0c;保持危…

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;其支持的行为和读写状态的行为就可能完全…

java和C++之单例类双重检查加锁

1、Java public class Singleton {private volatile static Singleton instance;public static Singleton getInstance () {if (instance null) {synchronized (Singleton.class) {if (instance null) {instance new Singleton();}}}return instance;} } 2、C class Singlet…

基于Qt的光盘刻录开发

.转载于:https://blog.51cto.com/weiyuqingcheng/1921369

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

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

软件项目组织管理(十)项目沟通管理

软件项目成功的主要因素 用户参与主管层的支持需求的清晰表述 沟通管理的目标 及时而适当地创建、收集、发送、储存和处理项目的信息。 沟通管理的过程 沟通规划信息发布绩效报告利益相关者管理 沟通渠道数目计算公式 Sn*(n-1)/2 S&#xff1a;沟通渠道数量 n&#xff1…

ubuntu 14.04 安装Java JDK

Linux 下安装配置 JDK7 自从从Oracle收购Sun近三年来&#xff0c;已经有很多变化。早在8月&#xff0c;甲骨文将“Operating System Distributor License for Java”许可证终结&#xff0c;这意味着第三方将不可以依据这一许可分发他们的软件包。  因此Ubuntu Linux已经开始禁…

shell 获取值 默认值

default0PAGE_PVcat a.log|awk {print $1}PAGE_PV${PAGE_PV:-${defaut}}转载于:https://blog.51cto.com/lihongyi/1567518