Почему Visual Studio 2017 не может создать клиент REST API для Swagger Petstore?
Я пытаюсь использовать Swagger / OpenAPI docs/specs для генерации клиентского кода REST API в C#, но сталкиваюсь с несколькими проблемами.
В частности, при попытке использовать пример Swagger.io Petstore в качестве отправной точки:
Использование VS 2017 Add > REST API client
опция в VS 2017, я не получаю никакого кода - вместо этого отображается ошибка:
Генерация клиентского кода и добавление в проект начался
Сгенерируйте клиентский код для REST API со следующими параметрами:
Имя API REST: OpenApiClientClient, базовое пространство имен: OpenApiClient, путь к файлу метаданных: C: \ Users \ Marc \ AppData \ Local \ Temp \ WebToolsAutoRest \ OpenApiClientClient \ 201807162213351660 \ swagger.json
[Info] AutoRest Core 0.16.0.0
[Информация] Инициализация моделера.
[Информация] Инициализация моделера.
[Информация] Разбор чванства файла JSON.
[Информация] Генерация клиентской модели из модели чванства.
[Fatal] Ошибка при генерации модели клиента: формат коллекции "multi" не поддерживается (в параметре "status").
Исключение: при генерации кода произошла ошибка при попытке добавить клиента для REST API
Сгенерировать код клиента и добавить в проект не удалось
Добавление клиента REST API для сбоя
Так что, если пример приложения Swagger не совместим - как другие будут? (и я попробовал несколько других, все с теми же результатами, к сожалению).
Что здесь не так? Я что-то упустил, мне нужно добавить некоторые дополнительные инструменты в VS 2017, чтобы сделать эту работу?
ОБНОВЛЕНИЕ:
Хорошо, теперь я попытался установить Autorest, используя npm напрямую:
npm install -g 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 [версия: 2.0.4280; узел: v9.9.0]
(C) 2018 Microsoft Corporation.
https://aka.ms/autorest
Неудача:
Ошибка: невозможно запустить AutoRest Core из 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\npm\node_modules\autorest \dist\app.js:232:19) в
Есть еще идеи?
1 ответ
Visual Studio 2017 использует очень старую версию AutoRest. Проблема, с которой вы столкнулись, это проблема, которая была исправлена в AutoRest v. 1.0. Как объясняется в комментариях к этому вопросу:
Вы имеете в виду версию autorest, встроенную в визуальную студию? - Это невероятно старое, и мы не обновляли его (мы полностью изменили способ работы автореста).
Вам нужно будет установить узел и использовать авторест из командной строки.
Похоже , невозможно обновить AutoRest, используемый Visual Studio 2017, поэтому вам нужно вызвать AutoRest напрямую.
У меня также была эта проблема, поэтому я создал для нее инструмент под названием REST API Client Code Generator. Я работал в командах, где мы использовали такие инструменты, как AutoRest, NSwag и Swagger Codegen, для генерации наших клиентов REST API, и меня всегда раздражало, что инструмент "Добавить новый - клиент REST API..." в Visual Studio не всегда работал и было очень хлопотно, когда пришло время заново генерировать клиента
Это добавит в проект файл спецификации OpenAPI (Swagger.json) и настроит пользовательский инструмент, чтобы каждый раз при внесении изменений в него повторно создавался код клиента REST API. Вы также можете щелкнуть правой кнопкой мыши файл Swagger.json и переключить генераторы кода.
Я разработал инструмент в основном для личного использования и для использования в своих командах, но если вы считаете его полезным и считаете, что в нем нет чего-то, что вам действительно нужно, пожалуйста, обратитесь
Попробуйте запустить autorest --reset
, Это работало на Windows с узлом v8.12.0. До запуска этой команды я получал ту же ошибку.