Именование сгенерированных 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
,