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

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

序号 验证类名称 验证对象类 命名空间 使用的验证方式
1 ArticleValidator ArticleInputDto App.Application.Blog.Validators 1)NotEmpty,非empty验证; 2)Length,字符串长度范围验证; 3)NotNull,非null验证; 4)Must,自定义验证,本类中主要验证集合属性必须包含元素。
2 LeavemsgValidator CommentInputDto App.Application.Blog.Validators 1)NotEmpty,非empty验证; 2)MaximumLength,字符串最大长度验证。
3 NoticeValidator NoticeInputDto App.Application.Blog.Validators 1)NotEmpty,非empty验证; 2)MaximumLength,字符串最大长度验证。
4 ReplyValidator ReplyInputDto App.Application.Blog.Validators 1)NotEmpty,非empty验证; 2)MaximumLength,字符串最大长度验证; 3)NotEqual,验证属性不等于指定内容。
5 TagsValidator TagsInputDto App.Application.Blog.Validators 1)NotEmpty,非empty验证; 2)MaximumLength,字符串最大长度验证。
6 SysPermissionValidator SysPermissionInputDto App.Application.SysManager.Validators 1)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#

相关推荐
CSharp精选营12 小时前
.NET 8 Web开发入门(三):解构引擎——依赖注入(DI)与中间件管道
中间件·asp.net core·依赖注入·ioc容器·请求管道·服务生命周期
深山老林.20 天前
第15章:使用重叠和动态网格
fluent
医疗信息化王工25 天前
基于ASP.NET Core的医院输血审核系统设计与实现
后端·mvc·asp.net core·输血审核
医疗信息化王工1 个月前
基于ASP.NET Core的住院日志统计系统设计与实现
后端·layui·asp.net core·npoi·dapper
无风听海1 个月前
.NET10之HttpContext.RequestServices 深入解析
.net·asp.net core
硅基喵1 个月前
聊聊 ASP.NET Core 中间件和过滤器的区别
asp.net core
小邓的技术笔记2 个月前
Serilog:从结构化日志认知到 .NET 工程落地
asp.net core·结构化日志·可观测性·serilog
硅基喵2 个月前
Serilog:从结构化日志认知到 .NET 工程落地
asp.net core·可观测性
awayuk112 个月前
Fluent的组分运输模型详解
ansys·cfd·fluent
硅基喵2 个月前
ASP.NET Core 外部依赖调用治理实战:HttpClientFactory、Polly 与幂等边界
asp.net core·架构设计