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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:24:57