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

开源博客项目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.dtcms.com/a/4682.html

相关文章:

  • C++类与对象(5)—流运算符重载、const、取地址
  • 番外篇之通讯录
  • Java反射调用kotlin中的类,Object类,Companion对象
  • 专业pdf编辑工具PDF Expert mac中文版特点介绍
  • 【阿里云】图像识别 智能分类识别 项目开发(一)
  • Centos部署GitLab-备份恢复
  • MYSQL加密和压缩函数详解和实战(含示例)
  • hdlbits系列verilog解答(exams/m2014_q4i)-45
  • Deepin使用记录-deepin系统下安装RabbitMq
  • 知行之桥EDI系统HTTP签名验证
  • CPU、GPU、TPU内存子系统架构
  • 【STM32单片机】自动售货机控制系统设计
  • 高精度乘法
  • 某省交控高速公路分公司高效运维
  • Windows安装Hadoop运行环境
  • 单片机学习3——数码管
  • java根据时间区间计算区间中都包含那几个月
  • 【点云surface】 凹包重构
  • 改进YOLOv8 | YOLOv5系列:RFAConv续作,即插即用具有任意采样形状和任意数目参数的卷积核AKCOnv
  • Linux MMC子系统 - 6.eMMC 5.1工作模式-设备识别模式
  • Unity-链接MySql8.0
  • [网络] 字节一面~ 2. HTTP 2 与 HTTP 1.x 有什么区别
  • SpringMVC(三)
  • flink sqlClient提交hiveIceberg
  • 日志配置的一些思考
  • 1.前端--基本概念【2023.11.25】
  • 【DevOps】Git 图文详解(九):工作中的 Git 实践
  • 网络篇---第一篇
  • ubuntu 使用快照启动polygon主网
  • Linux内核--内存管理(四)CPU缓存