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

NSwag CodeGenerator自定义客户端类名 移除路由连字符转换的下划线

解决方案

你可以通过以下两种方式实现需求,可根据你的项目场景选择:

方案1:直接配置替换规则(适合路由数量少的场景)

你当前使用的MultipleClientsFromFirstTagAndOperationId生成模式会取接口的第一个标签作为控制器名称,只需在nswag.json的C#代码生成配置中添加tagNameReplacements节点,直接映射含连字符的标签名称即可,配置示例如下:

{
  "codeGenerators": {
    "cSharp": {
      "className": "SomeAPI{controller}Client",
      "operationGenerationMode": "MultipleClientsFromFirstTagAndOperationId",
      // 新增标签名替换规则
      "tagNameReplacements": {
        "my-route": "MyRoute",
        "other-business-route": "OtherBusinessRoute"
      },
      // 其余原有配置保持不变
      "namespace": "YourNamespace",
      "output": "./Clients/GeneratedClient.cs"
    }
  }
}

配置完成后重新生成,就能得到SomeAPIMyRouteClient格式的类名。

方案2:自定义控制器名称生成器(适合路由数量多、需要批量处理的场景)

如果含连字符的路由数量较多,逐一配置替换规则效率太低,可以自定义控制器名称生成逻辑,自动把所有连字符转换为驼峰格式:

  1. 新建一个类库项目,引用NSwag.CodeGeneration.CSharpNuGet包,添加如下代码:
using NSwag.CodeGeneration.CSharp;
using System.Text.RegularExpressions;

public class HyphenRemovedControllerNameGenerator : CSharpControllerNameGenerator
{
    public override string Generate(string controllerName)
    {
        // 匹配连字符后的第一个字符,转大写后去掉连字符
        var processedName = Regex.Replace(controllerName, @"-(\w)", match => match.Groups[1].Value.ToUpper());
        return base.Generate(processedName);
    }
}
  1. 编译类库得到dll文件,在nswag.json中指定使用你的自定义生成器:
{
  "codeGenerators": {
    "cSharp": {
      "className": "SomeAPI{controller}Client",
      "operationGenerationMode": "MultipleClientsFromFirstTagAndOperationId",
      // 配置自定义生成器,格式为【类名, 类库程序集名称】
      "controllerNameGeneratorType": "HyphenRemovedControllerNameGenerator, YourCustomGeneratorLib",
      // 其余原有配置保持不变
    }
  }
}
  1. 若使用NSwag.MSBuild生成,需确保自定义类库的dll路径在MSBuild的程序集搜索范围内,或者填写生成器类型的完整绝对路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:15:02