2016-05-23 6 views
4

Ich spielte mit den AutoRest und Swagger Projekten herum. Mein Web-API-Controller hat eine Methode namens GetAllAsync. Wenn ich einen Client für den Dienst erzeuge, hat der Client eine Schnittstelle IResourcesOperations, wobei Resources der Name des Controllers ist.Benennung AutoRest generierte Methodennamen mit Swagger

Die Schnittstelle hat eine Methode namens GetAllAsyncWithHttpMessagesAsync. Dann gibt es eine statische Klasse namens ResourcesOperationsExtensions, die eine Methode namens GetAllAsync definiert und eine GetAllAsyncAsync. Die erste führt tatsächlich die zweite aus einem neuen Thread aus dem Thread-Pool (Task.Factory.StartNew). Wer kennt den Grund dafür?

fand ich, dass ich meine Controller-Aktion-Methode mit dem Attribute schmücken kann

[SwaggerOperation("GetResources")] 

Diese eine Methode auf der Client-Klasse generieren GetResourcesWithHttpMessagesAsync genannt und alle Methoden für diese Web-API Aktion von der Methode Schnittstelle und Erweiterung entfernen Klasse.

Jetzt meine Frage sind, warum werden diese drei Methoden standardmäßig generiert?

Und gibt es eine Möglichkeit, einen Client mit einer Methode mit dem Namen GetResources (d. H. Loszuwerden, dass WithHttpMessagesAsync Suffix) oder sogar GetAllAsync?

Antwort

1

AutoRest (mindestens die neueren Versionen) generiert Klassen mit dem Suffix Extensions. Diese Klassen enthalten Erweiterungsmethoden auf der Proxy-Schnittstelle, mit denen Sie die Methoden mit verkürzten Methodennamen aufrufen können.

Fügen Sie einfach eine

@using TheNameSpace.OfYour.Client.Extensions 

zu jeder Klasse, in der Sie den Zugriff auf diese verkürzte Verfahren Namen benötigen.

0

AutoRest generiert grundsätzlich immer eine <operation-name>Async (Erweiterung) -Methode für Personen, die async/await verwenden möchten und eine synchrone Version <operation-name>, die blockiert.

Sie haben nicht gesagt, was Ihre Methode tatsächlich zurückgibt oder tun soll, aber ich nehme an, dass Sie eine Async in Ihren generierten Methodennamen weniger wollen.

In diesem Fall müssen Sie Swashbuckle davon überzeugen, das Suffix Async zu entfernen, wenn es den Swagger generiert, d. H. Den generierten Methodennamen auf GetAll überschreiben. AutoRest versucht nicht, intelligent zu sein, wenn eine Swagger-Methodendefinition mit dem Namen GetAllAsync angezeigt wird.