4

我有一个 Windows UWP 客户端应用程序,它需要调用由我的 ASP.NET 服务托管的 REST API。要生成我的客户端代理,我使用以下 Visual Studio 选项...

右键单击项目 -> 添加 -> REST API 客户端...

我提供了 swagger 端点的 URL,它会生成预期的客户端代码。但缺点是它会生成所有类,即使在我的情况下,我有一个共享类库,其中定义了所有服务器端类。这很痛苦,因为生成的类不尊重我的类层次结构的继承,并将所有内容扁平化为非继承类。

是否可以让 AutoRest 为类重用现有的 .NET 库,而不是总是生成新类?当我使用 WCF 客户端代理生成器时,这是一个选项。

4

2 回答 2

1

似乎Add REST API client没有用于重用的高级设置。但是Add REST API client有两种加载元数据文件的方法,swagger URL 和现有的元数据文件。通过在我的站点上进行测试,它应该能够更新现有的元数据文件并删除或调整您不希望生成的节点。然后在添加 REST API 客户端时加载更新的现有元数据。

生成的类可能由元数据 json 文件和主机值确定。您也可以尝试在这里提交请求,看看 swagger 团队在生成元文件时是否可以保持层次结构。或者您可能需要手动创建代理以重用库。

于 2018-04-05T09:09:01.477 回答
0

我认为将 Visual Studio 中的“REST API Client”生成工具描述为“spartan”是公平的。

这个答案可能为时已晚,无法帮助您,或者您可能无法使用其他工具,但希望对您和/或未来的读者有所帮助,我将详细说明我是如何在NSwagStudio中生成 REST 客户端的它重用了我现有的类和枚举。(NSwagStudio 是免费和开源的,我没有隶属关系)。

在左侧窗格中,我们选择输入。除了预期的 Swagger 提要之外,还有一些有趣的选项,例如“通过反射的 Web API”,它“使用 .NET 反射来分析 ASP.NET Web API 或 ASP.NET Core 控制器”——这是我使用的选项,但我的屏幕截图显示了默认 Swagger 输入。

在此处输入图像描述

在右侧窗格中,单击“CSharp Client”并切换到“CSharp Client”选项卡。

灵丹妙药是取消勾选“生成 DTO 类型”

在此处输入图像描述

这将导致它只生成客户端,因此您可以重用现有的 DTO。

您需要为客户端指定一个命名空间,以及可选的一个或多个命名空间,这些命名空间将作为using指令添加到生成的 C# 文件中。例如,如果您希望您的客户端在命名空间中MyNamespace并且您的模型类在其中,SomeOtherNamespace您将输入以下内容:

在此处输入图像描述

玩这些选项非常值得。关于一些默认值以及我对它们感到满意的一些快速说明:

  • HttpClient注入并且您控制生命周期(在我看来这是一件好事

  • 定义了一个BaseUrl属性。我还没有对此进行测试,但我希望通过查看生成的代码,这将允许我安全地启动客户端类的多个实例以与共享相同 API 的多个服务器通信

  • JsonSerializerSettings属性是protected,但可以通过UpdateJsonSerializerSettings 部分方法配置

我已经从File菜单中保存了我的设置,并将.nswag文件添加到源代码管理中,这样我以后可以在必要时轻松地重新生成客户端。

于 2019-08-23T13:32:23.610 回答