为什么 Visual Studio 2017 无法为 Swagger Petstore 生成 REST API 客户端?

Why does Visual Studio 2017 fail to generate REST API client for Swagger Petstore?

我正在尝试使用 Swagger / OpenAPI docs/specs 在 C# 中 生成 REST API 客户端代码,但是我我 运行 遇到了几个问题。

最值得注意的是 - 当尝试使用 Swagger.io Petstore 示例作为起点时:

在 VS 2017 中使用 VS 2017 Add > REST API client 选项,我没有生成任何代码 - 而是显示错误:

Generating client code and adding to project started
Generate client code for REST API with following parameters:
REST API Name: OpenApiClientClient, Base namespace: OpenApiClient, Metadata file path: C:\Users\Marc\AppData\Local\Temp\WebToolsAutoRest\OpenApiClientClient1807162213351660\swagger.json
[Info]AutoRest Core 0.16.0.0
[Info]Initializing modeler.
[Info]Initializing modeler.
[Info]Parsing swagger json file.
[Info]Generating client model from swagger model.
[Fatal]Error generating client model: Collection format "multi" is not supported (in parameter 'status').
Exception: There was an error during code generation when trying to add a client for the REST API
Generating client code and adding to project failed
Adding REST API client for failed

因此,如果 Swagger 示例应用程序不兼容 - 其他人会怎样?? (不幸的是,我尝试了其他几个,结果都一样)。

这是怎么回事?我是否遗漏了什么,我是否需要向 VS 2017 添加一些额外的工具才能使其正常工作?

更新:

好的,所以我现在尝试直接使用 npm 安装 Autorest:

npm install -g autorest

这似乎有效 - 没有显示错误或任何错误。

但是尝试 运行 Autorest - 使用一组命令行参数,或者甚至只是单独使用 - 会导致错误:

AutoRest -CodeGenerator CSharp -Modeler Swagger 
         -Input https://petstore.swagger.io/v2/swagger.json 
         -Namespace Services.UserServiceClient -OutputDirectory d:\projects 
         -AddCrendentials true

或者只是

AutoRest <kbd>Enter</kbd>

结果:

AutoRest code generation utility [version: 2.0.4280; node: v9.9.0]
(C) 2018 Microsoft Corporation.
https://aka.ms/autorest
Failure:
Error: Unable to start AutoRest Core from C:\Users\Marc.autorest\@microsoft.azure_autorest-core@2.0.4280\node_modules\@microsoft.azure\autorest-core
Error: Unable to start AutoRest Core from C:\Users\Marc.autorest\@microsoft.azure_autorest-core@2.0.4280\node_modules\@microsoft.azure\autorest-core
at main (C:\Users\Marc\AppData\Roaming\npm\node_modules\autorest \dist\app.js:232:19) at

还有什么想法吗?

Visual Studio 2017 在那个问题中使用了非常旧的 AutoRest. The issue you are seeing is this one which was fixed in AutoRest v. 1.0. As explained in the comments 版本:

Are you referring to the autorest version that's built-into visual studio? -- That's incredibly old, and we didn't update that (we've changed the whole way autorest works).

You are going to need to install node and use autorest from the command line.

看起来 it's not possible to update AutoRest 被 Visual Studio 2017 使用,所以您需要直接调用 AutoRest。

试试 运行 autorest --reset。这适用于节点 v8.12.0 的 windows。在 运行 该命令之前,我遇到了同样的错误。

我也遇到了这个问题,所以我为它构建了一个名为 REST API Client Code Generator 的工具。我在团队中工作时,我们使用 AutoRest、NSwag 和 Swagger Codegen 等工具来生成我们的 REST API 客户端,但 Visual Studio 中的 "Add New - REST API Client..." 工具并不总是有效,这总是让我很恼火到 re-generate 客户

的时候很麻烦

这会将 OpenAPI 规范文件 (Swagger.json) 添加到项目并设置自定义工具,以便每次对其进行更改时 REST API 客户端代码是 re-generated。您也可以右键单击 Swagger.json 文件并切换代码生成器

我构建该工具主要供个人使用和在我的团队中使用,但如果您觉得它有用并且认为它缺少您真正需要的东西,请联系我们