4

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

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

我发现我可以用属性装饰我的控制器操作方法

    [SwaggerOperation("GetResources")]

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

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

有没有办法用一个名为的方法GetResources(即去掉那个 WithHttpMessagesAsync 后缀)甚至生成一个客户端GetAllAsync

4

2 回答 2

2

AutoRest(至少是较新的版本)生成带有后缀的类Extensions。这些类包含代理接口上的扩展方法,允许您使用缩短的方法名称调用方法,就像您所追求的那样。

只需添加一个

@using TheNameSpace.OfYour.Client.Extensions

到您需要访问这些缩短的方法名称的任何类。

于 2016-06-15T11:27:50.273 回答
1

AutoRest basically always generates an <operation-name>Async (extension) method for people who want to use async/await and a synchronous version <operation-name> that blocks.

You did not say what your method actually returns or is supposed to do, but I assume you want one less Async in your generated method names.

In that case you have to convince Swashbuckle to strip the Async suffix when it generates the Swagger, i.e. override the generated method name to GetAll. AutoRest does not try to be smart when it sees a Swagger method definition with name GetAllAsync.

于 2016-11-16T06:18:08.043 回答