如何移除Swagger中枚举输入的可用值预览(Swashbuckle/.NET)
移除Swagger中枚举值的「Available values」预览列表(.NET 5/6/7 + Swashbuckle)
可以实现这个需求,核心思路是通过自定义CSS隐藏Swagger UI中枚举参数的预览列表,同时保留「Try it out」后的下拉选择功能,具体步骤如下:
方法一:注入自定义CSS隐藏预览区域
添加自定义样式文件
在项目的wwwroot目录下创建swagger-custom.css文件,写入以下样式:/* 隐藏枚举参数的Available values预览列表 */ .parameters-container .parameter__enum { display: none; }配置Swagger UI加载自定义样式
根据你的.NET版本,在配置Swagger的地方注入这个样式文件:- .NET 6/7(Program.cs):
app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "你的API版本名称"); // 加载自定义CSS c.InjectStylesheet("/swagger-custom.css"); }); - .NET 5(Startup.cs的Configure方法):
app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "你的API版本名称"); c.InjectStylesheet("/swagger-custom.css"); });
- .NET 6/7(Program.cs):
方法二:通过自定义Schema过滤器调整枚举展示(可选)
如果不想用CSS,也可以通过自定义Schema过滤器修改OpenAPI文档的枚举描述,但这种方式需要注意:它会移除OpenAPI schema中的枚举值描述,但保留下拉所需的enum字段(确保Try it out时下拉框正常)。不过这种方式不如CSS直接,示例代码如下:
public class HideEnumPreviewFilter : ISchemaFilter { public void Apply(OpenApiSchema schema, SchemaFilterContext context) { if (context.Type.IsEnum) { // 清空枚举的描述列表,Swagger UI就不会显示Available values了 schema.Enum.Clear(); // 重新添加枚举值的原始值,保证下拉框正常工作 foreach (var enumValue in Enum.GetValues(context.Type)) { schema.Enum.Add(new OpenApiString(enumValue.ToString())); } } } }
然后在AddSwaggerGen中注册这个过滤器:
builder.Services.AddSwaggerGen(c => { c.SchemaFilter<HideEnumPreviewFilter>(); // 其他配置 });
注意:方法二可能会影响部分Swagger UI的其他枚举展示逻辑,优先推荐方法一。
内容的提问来源于stack exchange,提问作者Julius Mikkelä
相关产品推荐
相关产品推荐

