You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于已编写的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:48:00