You need to enable JavaScript to run this app. 能否在Swashbuckle生成的API文档中隐藏枚举值列表与名称描述?
优惠活动
大模型
产品
解决方案
定价
更多

能否在Swashbuckle生成的API文档中隐藏枚举值列表与名称描述?

Swashbuckle隐藏自动生成枚举值列表的实现方案

Swashbuckle目前没有内置的直接控制枚举值列表展示的开关,之前调研的DescribeAllEnumsAsStrings配置仅能调整枚举值的序列化展示形式,无法移除自动生成的可选值列表。可以通过自定义OpenApi过滤器的方式实现目标效果,步骤如下:

核心实现逻辑

Swagger页面展示的枚举值列表本质来源于两个部分:

  • OpenApi文档Schema中挂载的Enum可选值集合
  • Swashbuckle生成参数描述时,自动拼接在自定义描述后方的['枚举值1', '枚举值2'...]格式文本

只要对生成的OpenApi文档做这两部分内容的裁剪,即可实现隐藏效果,且不会影响参数描述里的自定义跳转链接。

具体落地步骤

1. 编写自定义操作过滤器

新建实现IOperationFilter接口的过滤器类,遍历接口入参匹配带枚举值定义的参数,执行裁剪逻辑:

public class HideEnumValueListOperationFilter : IOperationFilter
{
    private readonly Regex _enumListSuffixRegex = new Regex(@"\s*\['.*?'\]\s*$", RegexOptions.Compiled);
    public void Apply(OpenApiOperation operation, OperationFilterContext context)
    {
        if (operation.Parameters == null) return;

        foreach (var parameter in operation.Parameters)
        {
            var schema = parameter.Schema;
            // 匹配携带枚举值定义的参数
            if (schema.Enum != null && schema.Enum.Any())
            {
                // 清空自动生成的枚举可选值集合
                schema.Enum.Clear();
                // 移除描述末尾自动拼接的枚举列表文本
                if (!string.IsNullOrWhiteSpace(parameter.Description))
                {
                    parameter.Description = _enumListSuffixRegex.Replace(parameter.Description, string.Empty);
                }
            }
        }
    }
}

2. 注册自定义过滤器

在项目的Swagger服务配置逻辑中,将自定义过滤器加入Swagger生成管线:

// Program.cs 或 Startup.cs 中的Swagger配置段
builder.Services.AddSwaggerGen(options =>
{
    // 原有Swagger文档生成配置保持不变
    // ...
    // 注册枚举值隐藏过滤器
    options.OperationFilter<HideEnumValueListOperationFilter>();
});

扩展适配

如果存在请求体、响应体中嵌套使用枚举类型的场景,可再编写实现ISchemaFilter接口的过滤器,对嵌套层级的Schema执行同样的Enum集合清空、描述后缀裁剪逻辑,覆盖所有位置的枚举展示。


内容的提问来源于stack exchange,提问作者daxu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 04:12:06