我正在玩AutoRest和Swagger项目。我的Web API控制器有一个名为GetAllAsync
的方法。当我为服务生成客户端时,客户端有一个接口IResourcesOperations
,其中Resources
是控制器的名称。
该接口有一个名为GetAllAsyncWithHttpMessagesAsync
的方法。然后是一个名为ResourcesOperationsExtensions
的静态类,它定义了一个名为GetAllAsync
的方法和一个名为GetAllAsyncAsync
的方法。第一个实际上是从线程池(Task.Factory.StartNew
)运行第二个新线程。有人知道原因吗?
我发现我可以用属性
修饰我的控制器动作方法 [SwaggerOperation("GetResources")]
这将在名为GetResourcesWithHttpMessagesAsync
的客户端类上生成一个方法,并从接口和扩展方法类中删除此Web API操作的所有方法。
现在我的问题是,为什么默认生成这三种方法?
有没有办法使用名为GetResources
的方法生成客户端(即摆脱WithHttpMessagesAsync后缀)甚至是GetAllAsync
?
答案 0 :(得分:1)
AutoRest(至少是更新版本)生成后缀为Extensions
的类。这些类包含代理接口上的扩展方法,允许您使用缩短的方法名称来调用方法,如您所追求的那样。
只需添加
即可@using TheNameSpace.OfYour.Client.Extensions
到您需要访问这些缩短的方法名称的任何类。
答案 1 :(得分:0)
AutoRest基本上总是为想要使用async / await和阻塞的同步版本<operation-name>Async
的人生成<operation-name>
(扩展名)方法。
您没有说明您的方法实际返回或应该做什么,但我假设您希望在生成的方法名称中少一个Async
。
在这种情况下,您必须说服Swashbuckle在生成Swagger时删除Async
后缀,即将生成的方法名称覆盖为GetAll
。当AutoRest看到名为GetAllAsync
的Swagger方法定义时,它不会尝试变得聪明。