【问题标题】:NSwag generating duplicate typesNSwag 生成重复类型
【发布时间】:2018-02-25 16:34:30
【问题描述】:

我正在使用 NSwag SwaggerToCSharpClientGenerator 来生成请求和响应类以及枚举。

我有一些 Web API 方法共享相同的枚举作为参数或请求对象的一部分。当我运行 NSwag API 时,它多次生成相同的枚举定义,但命名为 Enum1、Enum2、Enum3、ResponseClassEnum。

我可以配置 NSwag(或 Swashbuckle)以便只生成一个枚举吗?

我的 NSwag 代码如下所示:

   var document = SwaggerDocument.FromUrlAsync(
      "http://localhost:5003/swagger/v1/swagger.json").Result;

   var settings = new SwaggerToCSharpClientGeneratorSettings();
   settings.GenerateClientClasses = false;
   settings.CSharpGeneratorSettings.Namespace = "My.Interface";
   settings.CSharpGeneratorSettings.ArrayType = "List";
   settings.AdditionalNamespaceUsages = new string[] { "System.Collections.Generic" };
   settings.GenerateExceptionClasses = false;

   var generator = new SwaggerToCSharpClientGenerator(document, settings);

   var code = generator.GenerateFile();
   File.WriteAllText("Swagger.MyApi.cs", code);

我在这里放置了混淆的 swagger.json - https://pastebin.com/hT5ySZub

混淆的 swagger.json 产生的输出在这里 - https://pastebin.com/e0AYJWer 在输出中,类型 DupEnum 定义在以下类型中:DupEnum、DupEnum2、DupEnum3 和 TypeBDupEnum。

【问题讨论】:

    标签: nswag


    【解决方案1】:

    您可能正在使用 swashbuckle 生成 swagger 规范:问题是 Swashbuckle 不引用枚举而是重复它们 - 这就是它们被多次生成的原因(参见:https://github.com/RSuter/NJsonSchema/issues/17)。

    如果规范是使用 NSwag 生成的,那么枚举会使用特殊属性 (x-schema) 进行引用,并且生成的代码不包含任何重复项。

    根本问题是 Swagger 规范 - 它不允许在原始参数中引用枚举...而且我什至不确定这是否已在 OpenAPI 3 中修复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多