当前位置: 首页 > article >正文

开源博客项目Blog .NET Core源码学习(7:FluentValidation使用浅析)

  开源博客项目Blog .NET使用FluentValidation模块定义数据验证项,具体而言,是在App.Application项目中定义验证类,设置验证规则,同时在App.Framwork项目中基于FluentValidation.AspNetCore包设置ASP.NET验证管道自动验证。
  App.Application项目中总共定义了六个验证类,使用的都是FluentValidation内置的验证类,详细说明如下:

序号验证类名称验证对象类命名空间使用的验证方式
1ArticleValidatorArticleInputDtoApp.Application.Blog.Validators1)NotEmpty,非empty验证;
2)Length,字符串长度范围验证;
3)NotNull,非null验证;
4)Must,自定义验证,本类中主要验证集合属性必须包含元素。
2LeavemsgValidatorCommentInputDtoApp.Application.Blog.Validators1)NotEmpty,非empty验证;
2)MaximumLength,字符串最大长度验证。
3NoticeValidatorNoticeInputDtoApp.Application.Blog.Validators1)NotEmpty,非empty验证;
2)MaximumLength,字符串最大长度验证。
4ReplyValidatorReplyInputDtoApp.Application.Blog.Validators1)NotEmpty,非empty验证;
2)MaximumLength,字符串最大长度验证;
3)NotEqual,验证属性不等于指定内容。
5TagsValidatorTagsInputDtoApp.Application.Blog.Validators1)NotEmpty,非empty验证;
2)MaximumLength,字符串最大长度验证。
6SysPermissionValidatorSysPermissionInputDtoApp.Application.SysManager.Validators1)NotEmpty,非empty验证;
2)Must,自定义验证,本类中主要验证集合属性必须包含元素。

  App.Framwork项目的命名空间App.Framwork.DataValidation.Extensions中定义了扩展函数AddValidation,在该函数中主要实现三方面的功能:
  1)设置启用基于ASP.NET验证管道的自动验证,主要是调用FluentValidation.AspNetCore中的FluentValidationMvcExtensions.AddFluentValidation扩展函数实现;
  2)遍历所有程序集中的验证类并注册,项目中通过查找程序集中所有派生自IValidator接口的非抽象类获取所有验证类,然后调用TryAddTransient逐个注册验证类。根据前一篇文章的介绍,其实可以引用FluentValidation.DependencyInjectionExtensions包,然后调用AddValidatorsFromAssemblyContaining函数自动枚举注册验证类;
  3)设置加入全局过滤器,所有设置了IgnoreValidationAttribute特性的函数均忽略验证。

  最后在App.Hosting项目的Program文件中调用扩展函数AddValidation启用自动验证、注册验证类。

参考文献:
[1]https://gitee.com/miss_you/Blog
[2]https://www.donet5.com/Home/Doc
[3]https://docs.fluentvalidation.net/en/latest/index.html#


http://www.kler.cn/a/145697.html

相关文章:

  • 【FISCO BCOS】二十四、通过Java SDK对FISCO BCOS进行压力测试
  • Flutter调用HarmonyOS NEXT原生相机拍摄相册选择照片视频
  • 使用Websocket进行前后端实时通信
  • 04JavaWeb——Maven-SpringBootWeb入门
  • 【3GPP】【5G】注销流程(Deregistration procedures)
  • CentOS 安装Redis
  • 使用 Raspberry Pi、Golang 和 HERE XYZ 制作实时地图
  • 2023亚太杯数学建模思路 - 案例:粒子群算法
  • 为什么PCB板大多数都是绿色的?
  • Android获取原始图片Bitmap的宽高大小尺寸,Kotlin
  • Spark的通用运行流程与Spark YARN Cluster 模式的运行流程
  • 粒子群算法Particle Swarm Optimization (PSO)的定义,应用优点和缺点的总结!!
  • 【Jenkins】jenkins发送邮件报错:Not sent to the following valid addresses:
  • 线程的状态以及状态转移
  • Docker 部署 Nacos(单机),利用 MySQL 数据库存储配置信息
  • jpa创建自定义UUID,且符合IETF RFC 4122,不会出警告
  • 原生javascript实现放大镜效果
  • 【数据中台】开源项目(1)-LarkMidTable
  • Windows安装mysql8.0
  • 超好玩C++控制台打飞机小游戏,附源码
  • 红队攻防文库文章集锦
  • 【代码】考虑电解槽变载启停特性与阶梯式碳交易机制的综合能源系统优化调度matlab-yalmip-cplex/gurob
  • 分布式锁,分布式锁应该具备哪些条件,分布式锁的实现方式有:基于Zookeeper实现、Redis实现、数据库实现
  • cmake教程
  • Let’s xrOS 一款让你优先体验社区创作者的 visionOS App工具
  • 保姆级 ARM64 CPU架构下安装部署Docker + rancher + K8S 说明文档