Именование сгенерированных AutoRest имен методов с помощью Swagger

Я играл с проектами AutoRest и Swagger. В контроллере моего веб-API есть метод GetAllAsync, Когда я генерирую клиента для сервиса, у клиента есть интерфейс IResourcesOperations, где Resources это имя контроллера.

В интерфейсе есть метод GetAllAsyncWithHttpMessagesAsync, Тогда есть статический класс с именем ResourcesOperationsExtensions который определяет метод с именем GetAllAsync и один называется GetAllAsyncAsync, Первый фактически запускает второй из нового потока из пула потоков (Task.Factory.StartNew). Кто-нибудь знает причину этого?

Я обнаружил, что я могу украсить свой метод действия контроллера с атрибутом

    [SwaggerOperation("GetResources")]

Это сгенерирует метод в клиентском классе с именем GetResourcesWithHttpMessagesAsync и удалите все методы для этого действия веб-API из класса интерфейса и метода расширения.

Теперь мой вопрос: почему эти три метода генерируются по умолчанию?

И есть ли способ сгенерировать клиента с помощью метода с именем GetResources (т.е. избавиться от суффикса WithHttpMessagesAsync) или даже GetAllAsync?

2 ответа

AutoRest (по крайней мере, последние версии) генерирует классы с суффиксом Extensions, Эти классы содержат методы расширения в прокси-интерфейсе, которые позволяют вам вызывать методы с сокращенными именами методов, такими как те, которые вам нужны.

Просто добавьте

@using TheNameSpace.OfYour.Client.Extensions

к любому классу, в котором вам нужен доступ к этим сокращенным именам методов.

AutoRest в основном всегда генерирует <operation-name>Async (расширение) метод для людей, которые хотят использовать async / await и синхронную версию <operation-name> что блокирует

Вы не сказали, что ваш метод на самом деле возвращает или должен делать, но я предполагаю, что вы хотите меньше Async в ваших сгенерированных именах методов.

В этом случае вы должны убедить Swashbuckle раздеть Async суффикс, когда он генерирует Swagger, т.е. переопределить имя сгенерированного метода на GetAll, AutoRest не пытается быть умным, когда видит определение метода Swagger с именем GetAllAsync,

Другие вопросы по тегам