如何基于已编写的FluentValidator请求校验规则生成对应文档
基于FluentValidator提取校验规则生成文档的可行方案
下面是3种可直接落地的实现方案,可根据你的使用场景选择:
1. 内置元数据遍历方案(无额外依赖,灵活性最高)
FluentValidator的所有校验器默认都公开了Rules属性,可直接读取所有校验规则的元数据,自己解析后生成结构化的规则信息,示例代码如下:
// 实例化你自己编写的请求校验器 var validator = new YourRequestValidator(); // 遍历每个字段的校验规则 foreach (var rule in validator) { // 获取当前校验的字段名 var fieldName = rule.PropertyName; Console.WriteLine($"字段 {fieldName} 校验规则:"); // 遍历该字段绑定的所有校验项 foreach (var ruleComponent in rule.Components) { var validatorName = ruleComponent.Validator.GetType().Name; // 提取校验规则的参数(比如最大长度值、正则表达式等) var ruleParams = ruleComponent.Validator.GetType() .GetFields() .Select(f => f.GetValue(ruleComponent.Validator)) .ToList(); // 映射为可读的规则说明,可按需扩展自定义校验器的映射 var ruleDesc = validatorName switch { "NotEmptyValidator" => "非空", "EmailAddressValidator" => "符合标准邮箱格式", "MaximumLengthValidator" => $"最大长度为 {ruleParams.First()}", "MinimumLengthValidator" => $"最小长度为 {ruleParams.First()}", _ => validatorName.Replace("Validator", string.Empty) }; Console.WriteLine($"- {ruleDesc}"); } }
你可以把解析得到的结构化规则直接导出为Markdown、HTML格式的文档,或者同步到你的接口说明库中。
2. Swagger集成方案(Web项目首选)
如果是ASP.NET Core Web项目,可直接使用适配Swagger的FluentValidation扩展包,配置后所有校验规则会自动同步到Swagger接口文档的字段说明中,不需要手动写解析逻辑,同时也可以通过导出Swagger的OpenAPI结构化数据批量提取所有接口的校验规则。
3. 源码静态解析方案(编译期生成静态文档)
如果需要在编译阶段就生成静态校验文档,可基于Roslyn编写源码解析逻辑,直接扫描校验器代码里的RuleFor链式调用,提取所有调用的方法名和参数,这种方式可以直接拿到你代码里写的常量名(比如示例中的ValidationConstants.MinLength),而不是运行时的常量值,和源码配置的一致性最高。
小提示
如果用到了自定义校验器,只需要在方案1的规则映射表中新增对应自定义校验器的说明即可;也可以在编写校验规则时统一用WithName/WithMessage配置标准化的说明文本,解析时直接提取该文本作为规则说明,不需要额外做类型映射。
内容的提问来源于stack exchange,提问作者Elizabeth Grant
相关产品推荐
相关产品推荐

