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

如何通过Swashbuckle修改Swagger泛型模型的Schema命名规则

完全可以通过Swashbuckle原生配置实现你要的泛型Schema命名效果,不需要修改业务模型代码,具体实现方式如下:

配置方法

在项目的Swagger服务注册逻辑中,替换默认的Schema ID生成规则即可,以.NET 6+ 项目为例:

builder.Services.AddSwaggerGen(options =>
{
    // 自定义Schema命名规则
    options.CustomSchemaIds(type => GenerateSchemaId(type));
});

// 递归生成符合要求的Schema ID,支持嵌套泛型场景
string GenerateSchemaId(Type type)
{
    // 非泛型类型直接返回类型名
    if (!type.IsGenericType)
        return type.Name;

    // 截掉泛型类型名自带的`[参数数量]后缀,比如TheModel`1处理后得到TheModel
    var typeBaseName = type.Name.Split('`')[0];
    // 递归处理所有泛型参数,避免嵌套泛型命名异常
    var genericArgNames = type.GetGenericArguments()
        .Select(GenerateSchemaId);

    // 拼接为 泛型类名<参数1,参数2> 的格式
    return $"{typeBaseName}<{string.Join(", ", genericArgNames)}>";
}
效果说明

配置完成后重新启动项目,Swagger生成的Schema列表会完全匹配你的预期:

  • GenericModel
  • TheModel
  • AnotherGenericModel
  • TheModel
注意事项
  • 如果你的项目存在不同命名空间下的同名类型,为了避免Schema ID冲突,可以调整非泛型类型的返回值,拼接命名空间前缀即可,泛型部分的拼接逻辑无需改动。
  • 上述配置对Swashbuckle.AspNetCore 5.0及以上版本均生效,嵌套泛型场景(比如TheModel<List<GenericModel>>)也会自动生成符合阅读习惯的Schema名称,不会出现重名问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:18:24