【问题标题】:NSwagStudio using common C# shared libraryNSwagStudio 使用通用 C# 共享库
【发布时间】:2019-04-30 22:19:37
【问题描述】:

我想在我的端点 REST 服务和我的客户端之间使用共享 DLL。两者都是用 dotnet core 编写的。

我不希望生成的 nswag c# 包含在共享 DLL 中定义的这些对象,而只是引用它们。这样我保留了所有验证属性/逻辑,并且可以在服务器和前端进行验证。

我尝试使用“排除的类型名称”,但没有任何效果。例如。我的通用 dll 命名空间是“MyCommonLibrary”,其中有一个“MyType”类型的对象。我在该字段中尝试了“MyCommonLibrary.MyType”以及“MyType”,都没有生成缺少该类型的 C# 生成文件(即生成了新类型)。

假设我的 REST 调用是

public MyType[] GetAll(){ ... }

我希望生成的控制器返回 MyCommonLibrary.MyType 而不是“MyGenreatedController.MyType”。

有没有办法做到这一点?

我希望对此进行通配符,因为我和其他开发人员将继续添加此内容并希望生成生成的 C# 代码作为构建过程的一部分。

【问题讨论】:

  • ExcludedTypeNames 中的 MyType 应该可以工作
  • 就像我说的,我试过了,但是没有用。我尝试了名称“MyType”和完整的类型名称“MyNamespace.MyType”。 MyType 定义在与应用程序程序集不同的程序集中,如果这有什么不同的话。
  • ExcludedTypeNames 基于 Swagger 规范中的名称,而不是初始 C# 类型...这也是您不能通过命名空间通配符排除的原因(ns 不在规范中)

标签: nswag


【解决方案1】:

这个可以这样解决:

  • 添加一个自定义架构处理器,将 x-namespace 添加到规范中的所有类型/架构中
  • 生成客户端代码时,处理规范并根据命名空间动态查找所有排除的类型名称
  • 使用这些排除的类型名称运行客户端生成器

【讨论】:

  • 你能举个例子吗?
  • 对不起,我没有这个场景的样本。 Swagger 不是为这种情况设计的,即您必须定义所有模式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多