使用Swagger命名AutoRest生成的方法名称

时间:2016-05-23 15:26:33

标签: c# asp.net-web-api swagger swashbuckle autorest

我正在玩AutoRestSwagger项目。我的Web API控制器有一个名为GetAllAsync的方法。当我为服务生成客户端时,客户端有一个接口IResourcesOperations,其中Resources是控制器的名称。

该接口有一个名为GetAllAsyncWithHttpMessagesAsync的方法。然后是一个名为ResourcesOperationsExtensions的静态类,它定义了一个名为GetAllAsync的方法和一个名为GetAllAsyncAsync的方法。第一个实际上是从线程池(Task.Factory.StartNew)运行第二个新线程。有人知道原因吗?

我发现我可以用属性

修饰我的控制器动作方法
    [SwaggerOperation("GetResources")]

这将在名为GetResourcesWithHttpMessagesAsync的客户端类上生成一个方法,并从接口和扩展方法类中删除此Web API操作的所有方法。

现在我的问题是,为什么默认生成这三种方法?

有没有办法使用名为GetResources的方法生成客户端(即摆脱WithHttpMessagesAsync后缀)甚至是GetAllAsync

2 个答案:

答案 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方法定义时,它不会尝试变得聪明。