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

mar*_*c_s 4 swagger autorest visual-studio-2017

我正在使用Swagger / OpenAPI docs / specs 在C#中生成 REST API客户端代码,但是遇到了一些问题。

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

在此处输入图片说明

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

在此处输入图片说明

生成客户端代码并将其添加到已启动的项目中
生成具有以下参数的REST API客户端代码:
REST API名称:OpenApiClientClient,基本名称空间:OpenApiClient,元数据文件路径:C:\ Users \ Marc \ AppData \ Local \ Temp \ WebToolsAutoRest \ OpenApiClientClient \ 201807162213351660 \ swagger.json
[Info] AutoRest Core 0.16.0.0
[Info]正在初始化建模器。
[Info]正在初始化建模器。
[Info]正在解析swagger json文件。
[信息]从摇头模型生成客户端模型。
[致命]生成客户端模型时出错:不支持收集格式“多”(在参数“状态”中)。
异常:尝试为REST API添加客户端时,代码生成期间发生错误
生成客户端代码并添加到项目失败
添加失败的REST API客户端

因此,如果Swagger示例应用程序不兼容-其他人将如何?(很遗憾,我尝试了其他一些方法,但均获得了相同的结果)。

怎么了 我是否缺少某些东西,我是否需要在VS 2017中添加一些额外的工具才能使其正常工作?

更新

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

npm install -g autorest
Run Code Online (Sandbox Code Playgroud)

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

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

AutoRest -CodeGenerator CSharp -Modeler Swagger 
         -Input https://petstore.swagger.io/v2/swagger.json 
         -Namespace Services.UserServiceClient -OutputDirectory d:\projects 
         -AddCrendentials true
Run Code Online (Sandbox Code Playgroud)

要不就

AutoRest <kbd>Enter</kbd>
Run Code Online (Sandbox Code Playgroud)

结果是:

AutoRest代码生成实用程序[版本:2.0.4280; 节点:v9.9.0]
(C)2018 Microsoft Corporation。
https://aka.ms/autorest
失败:
错误:无法从C:\ Users \ Marc.autorest \ @ microsoft.azure_autorest-core @ 2.0.4280 \ node_modules \ @ microsoft.azure \ autorest-core
错误启动AutoRest Core 错误:无法从C:\ Users \ Marc.autorest \ @ microsoft.azure_autorest-core @ 2.0.4280 \ node_modules \ @ microsoft.azure \ autorest-core
在主目录(C:\ Users \ Marc \ AppData \ Roaming中启动AutoRest Core \ npm \ node_modules \ autorest \ dist \ app.js:232:19)

还有其他想法吗?

Hel*_*len 6

Visual Studio 2017使用的是AutoRest的非常旧的版本。您所看到的问题是AutoRest v。1.0中已解决的这一问题。如该问题评论中所述:

您是指Visual Studio内置的autorest版本吗?-这太老了,而且我们没有更新(我们改变了autorest的整个工作方式)。

您将需要从命令行安装node并使用autorest

似乎无法 更新 Visual Studio 2017使用的AutoRest,因此您需要直接调用AutoRest。