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