ASP.NET Core中如何移除Swagger泛型类型名的引号与数字?
解决Swagger中泛型类型Schema名称显示问题(ASP.NET Core + OpenAPI 3.0.1)
默认情况下,Swagger针对泛型类型生成的Schema名称会包含反引号和数字后缀(如ApiResponse1[AlarmItem[]]),要改成ApiResponse[AlarmItem[]]`这种简洁格式,只需通过自定义Schema过滤器实现:
步骤1:创建自定义Schema过滤器
实现ISchemaFilter接口,处理泛型类型的名称格式化:
using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.SwaggerGen; using System.Reflection; public class GenericSchemaNameFilter : ISchemaFilter { public void Apply(OpenApiSchema schema, SchemaFilterContext context) { // 非泛型类型直接跳过 if (!context.Type.IsGenericType) return; // 提取泛型类型定义的名称(移除`1这类后缀) var genericTypeDefName = context.Type.GetGenericTypeDefinition().Name; var cleanBaseName = genericTypeDefName.Substring(0, genericTypeDefName.IndexOf('`')); // 获取每个泛型参数对应的Schema名称 var genericArgNames = context.Type.GetGenericArguments() .Select(arg => context.SchemaGenerator.GenerateSchema(arg, context.SchemaRepository).Title); // 拼接成目标格式:基类名[参数1, 参数2...] schema.Title = $"{cleanBaseName}[{string.Join(", ", genericArgNames)}]"; } }
步骤2:注册过滤器到Swagger服务
在Program.cs(.NET 6+)或Startup.cs(旧版.NET)的Swagger配置中添加这个过滤器:
builder.Services.AddSwaggerGen(options => { // 注册自定义泛型Schema名称过滤器 options.SchemaFilter<GenericSchemaNameFilter>(); });
效果说明
该过滤器会自动处理所有泛型类型:
- 对于
ApiResponse<AlarmItem[]>,生成Schema名称ApiResponse[AlarmItem[]] - 对于多层泛型(如
ApiResponse<List<AlarmItem>>),生成ApiResponse[List[AlarmItem]]
完全匹配旧版Swagger 2.0的显示风格。
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

