在asp.net core中使用的验证框架FluentValidation

FluentValidation在asp.net core中怎么使用?

先安装包。

Install-Package FluentValidation.AspNetCore

和上一篇的实体类和验证类一样。

实体类:

public class Person
{public int Id { get; set; }public string Name { get; set; }public string Tel { get; set; }public string Email { get; set; }public DateTime Birthday { get; set; }public string IDCard { get; set; }public PersonAddress Address { 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().NotEmpty();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值必填!").NotEmpty().When(p => (DateTime.Now > p.Birthday.AddYears(1))).WithMessage(p => $"出生日期为{p.Birthday},现在时间为{DateTime.Now},大于一岁,CardID值必填!").Length(18).When(p => (DateTime.Now > p.Birthday.AddYears(1)));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().NotEmpty();RuleFor(a => a.Province).NotNull().NotEmpty();RuleFor(a => a.City).NotNull().NotEmpty();RuleFor(a => a.County).NotNull().NotEmpty();RuleFor(a => a.Address).NotNull().NotEmpty();RuleFor(a => a.Postcode).NotNull().NotEmpty().Length(6);}
}

Starup.cs

public void ConfigureServices(IServiceCollection services)
{services.AddControllers().AddFluentValidation();services.AddTransient<IValidator<Person>, PersonValidator>();services.AddSwaggerGen(c =>{c.SwaggerDoc("v1", new OpenApiInfo { Title = "FluentValidationWebDemo01", Version = "v1" });});
}

这里和asp.net core mvc的模型验证如出一辙。

 [ApiController][Route("[controller]")]public class HomeController : ControllerBase{private readonly ILogger<HomeController> _logger;private readonly IValidator<Person> _validator;public HomeController(ILogger<HomeController> logger, IValidator<Person> validator){_validator = validator;_logger = logger;}[HttpPost("/addperson")]public IActionResult AddPerson([FromBody] Person person){_logger.LogInformation("添加Person");if (ModelState.IsValid){return Ok("验证成功后,假装这里作了后端业务处理");}_logger.LogError("验证Person失败");return BadRequest("person没有验证通过");}}

测试传入数据:

{"id":0,"birthday":"2021-03-29T07:00:18.061Z","idCard":"","name":"","email":"axzxs2001163.com","tel":"1345346714","address":{"country":"中国","province":"山西","city":"","county":"古城","address":"","postcode":"04600"}
}

结果:

{"type": "https://tools.ietf.org/html/rfc7231#p-6.5.1","title": "One or more validation errors occurred.","status": 400,"traceId": "00-21fffead3f693fdf9156d796baf4e4ef-a7d39f85acf57cff-00","errors": {"Tel": ["'Tel' 的格式不正确。"],"Name": ["'Name' 不能为空。"],"Email": ["'Email' 不是有效的电子邮件地址。"],"Address.City": ["'City' 不能为空。"],"Address.Address": ["'Address' 不能为空。"],"Address.Postcode": ["'Postcode' 必须是 6 个字符,您输入了 5 字符。"]}
}

还是那句话,FluentValidation提供了更灵活,完强大的验证方式

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

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

相关文章

【EFCORE笔记】异步查询工作原理注释标记

异步查询 当在远程数据库中执行查询时&#xff0c;同步查询可能会阻止当前线程&#xff0c;异步查询可避免阻止线程&#xff0c;这有助于避免冻结户端界面&#xff0c; 异步操作还可以增加 Web 应用程序的吞吐量&#xff0c;可以在数据库操作完成前释放线程去处理其他请求。EF …

java 进程同步代码_java 实现进程间的同步(源代码)

操作系统课程设计&#xff1a;实现进程间的同步。 有问题留言import java.util.concurrent.Semaphore; /******** 信号量 *******/ class Sign { final static int NUMS 6; // 进程的数目 final static int RUN 1; // 运行完 final static int STOP 0; // 阻塞态 static int…

CSS日常公用样式与一些解决方案

一、自己总结的公用样式解析html, body, div, p, ul, li, dl, dt, dd, h1, h2, h3, h4, h5, h6, form, input, select, button, textarea, iframe, table, th, td { margin: 0; padding: 0; }img { border: 0 none; vertical-align: top; }ul, li { list-style-type: none; }h1…

上班族吐槽大集合:那些发生在公司的傻X奇遇

“明明不需要加班&#xff0c;到了点却偏偏没人起身走。”—— 小爱“头脑风暴&#xff0c;人越多效率越低下&#xff0c;最后风暴出来的东西也很难落实。”—— 好奇心“只是申请个办公用品&#xff0c;需要人事处签字&#xff0c;行政部签字&#xff0c;总监签字&#xff0c;…

C# 9 record 并非简单属性 POCO 的语法糖

最近升级专案到大统一 .NET 5 并使用 C#9 语法尝试改写套件,发现之前以为 record 只是简单属性 POCO 的简化语法糖的认知是错误。另外因为 POCO 属于需定义口语词&#xff0c;这边在本文定义简单属性 POCO 为 public class 类别 {public string ID{get;set}/*略*/} 只有属性的简…

java中注解的解析_全面解析Java中的注解与注释

注解一、什么是 Annotation&#xff1f; (注解 or 注释)Annotation, 准确的翻译应该是 -- 注解。 和注释的作用完全不一样。Annotation 是JDK5.0及以后版本引入的一个特性。 与类、接口、枚举是在同一个层次&#xff0c;可以成为java 的一个类型。语法是以 开头简单来说&#x…

安装配置Mysql主从

环境&#xff1a; 主从服务器上的MySQL数据库版本同为5.1.34 主机IP&#xff1a;192.168.0.1 从机IP&#xff1a;192.168.0.2 一. MySQL主服务器配置 1.编辑配置文件/etc/my.cnf # 确保有如下行 server-id 1 log-binmysql-bin binlog-do-dbmysql #需要备份的数据库名&#xf…

玩的时候好好玩,学的时候好好学。不做半吊子

要用大块的时间学习&#xff0c;玩的时间也不能短。比如&#xff1a;一周七天六天认认真真学习&#xff0c;不要某天下午一犹豫懒惰就不去实验室了&#xff0c;没有任何目的度过了无聊的下午。同时又没有玩的计划所以&#xff0c;玩的也不开心。 现在要做到的就是正常的计划不要…

java实现思维导图_Java并发(思维导图)

1&#xff0c;线程状态转换无限期等待&#xff1a;限期等待&#xff1a;线程生命流程&#xff1a;2&#xff0c;实现方式代码实现样例【三种方式】&#xff1a;packagecom.cnblogs.mufasa.demo2;importjava.util.concurrent.Callable;public class test1_Runnable implementsRu…

这本免费小书,带你征服 GitHub!

GitHub 漫游指南&#xff0c;一本有趣又通俗的 GitHub 教程&#xff0c;想要成为 star 之王么&#xff1f;今天给大家分享一份通俗易懂的 GitHub 学习教程&#xff0c;即《GitHub 漫游指南》。看过了不下十套 GitHub 教程了&#xff0c;小编愿称它为最强&#xff01;虽然没有 G…

jQuery formValidator表单验证插件4.1.0 下载 演示 文档 可换肤 代码生成器

更新记录: 2011/6/5 jQuery formValidator 4.1.0 ver申明&#xff1a;1、所有DEMO引用jQuery类库的时候&#xff0c;类库后面直接跟了版本号——表示插件支持的最高类库版本号2、插件的命名&#xff1a;插件名版本号&#xff0c;压缩版&#xff1a;插件名版本号min新增以下功能…

java context.write_Channel.write() 和 ChannelHandlerContext.write() 的区别

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。看了下netty 源代码, 终于明白了Channel.write() 和 ChannelHandlerContext.write() 的区别了网上说的都不是很清楚首先注明我的netty版本io.nettynetty-all4.0.36.FinalChannelPipeline处理ChannelH…

美国劳工部揭露中国女人大数据,看完彻底傻眼了……

导读&#xff1a;“中国人的勤奋&#xff0c;令世界惊叹和汗颜&#xff0c;甚至有一点恐惧。”——科斯&#xff0c;诺贝尔经济学奖得主那么中国人的“勤奋”能否用数据来量化一下呢&#xff1f;答案是可以的。另外&#xff0c;如果以性别来区分&#xff0c;究竟是中国男性更勤…

计算机女神,互联网第一夫人!

大家好&#xff0c;我是鱼皮&#xff0c;今天带大家认识一位计算机领域的女神&#xff0c;有关她的故事非常有趣&#xff01;先聊聊我是如何认识女神的吧。那是我在大四做毕业设计的时候&#xff0c;误打误撞地选了一个图像处理相关的课题&#xff0c;要做一个显微图像处理分析…

mysql安装目录centos_CentOS mysql安装系统方法

CentOS linux由于同时具有与RHEL的兼容性和企业级应用的稳定性&#xff0c;又允许用户自由使用&#xff0c;因此得到了越来越广泛的应用。1]CentOS mysql安装解压[rootlocalhost root]# cd /usr/local/mysql/software[rootlocalhost software]# lsmysql-4.0.16.tar.gz[rootloca…

不吃不喝,两周业余时间研究(cisco SCE CM )

最近比较忙&#xff0c;比较烦&#xff0c;不想说话&#xff0c;想打人&#xff0c;想发脾气了&#xff1b; 这几天比较累&#xff0c;相当的累&#xff0c;这两个星期什么都不顺心&#xff0c;心情也很低落 这两个星期维护的移动、广电网络都出现问题了&#xff0c;o(︶︿︶)o…

NET问答: 如何从 string 中挖出所有的 number ?

咨询区 van:我现在有一个需求&#xff0c;想从 string 中找到所有的 number 并提取出来。举例如下&#xff1a;string test "1 hello" string test1 " 1 world" string test2 "helloworld 99"请问我该如何做&#xff1f;回答区 Tabares:这个简…

大数据告诉你:学历真的能改变命运

央视新闻曾做过关于高考的调查&#xff0c;结果有七成网友支持高考取消数学&#xff0c;看到新闻后&#xff0c;有一位网友却一针见血地评论道&#xff1a;数学考试存在的意义就是把这七成网友筛选掉。的确&#xff0c;虽然买菜不需要专业数学知识&#xff0c;但数学可以决定我…

mysql控制台教程视频教程_mysql 控制台操作

一、连接mysql数据库1.首先打开cmd进入dos窗口2.切换至目录&#xff1a;D:\MySql5.0\mysql-5.0.51b-win32\bin(即&#xff1a;mysql安装目录下面的bin目录&#xff0c;该目录内有很多exe执行文件)3.键入命令&#xff1a;mysql -uroot -p 回车&#xff0c;提示输入密码&#xff…

Dapr微服务应用开发系列5:发布订阅构建块

题记&#xff1a;这篇介绍发布订阅构建块&#xff0c;这是对事件驱动架构设计的一种实现落地。注&#xff1a;对于“Building Blocks”这个词组的翻译&#xff0c;我之前使用了“构件块”&#xff0c;现在和官方文档&#xff08;Dapr中文社区的贡献&#xff09;保持一致&#x…