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

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

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

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

    [SwaggerOperation("GetResources")]

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

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

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


person MvdD    schedule 23.05.2016    source источник


Ответы (2)


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

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

@using TheNameSpace.OfYour.Client.Extensions

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

person Martin Rhodes    schedule 15.06.2016

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

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

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

person olydis    schedule 16.11.2016