首页 文章

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

提问于
浏览
4

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

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

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

[SwaggerOperation("GetResources")]

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

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

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

2 回答

  • 1

    AutoRest(至少是更新版本)生成后缀为 Extensions 的类 . 这些类包含代理接口上的扩展方法,允许您使用缩短的方法名称来调用方法,就像您之后使用的那样 .

    只需添加一个

    @using TheNameSpace.OfYour.Client.Extensions
    

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

  • 0

    AutoRest基本上总是为想要使用async / await和阻塞的同步版本 <operation-name> 的人生成 <operation-name>Async (扩展名)方法 .

    您没有说明您的方法实际返回或应该做什么,但我假设您想要在生成的方法名称中少一个 Async .

    在这种情况下,你必须说服Swashbuckle在生成Swagger时去除 Async 后缀,即将生成的方法名称覆盖为 GetAll . 当AutoRest看到名为 GetAllAsync 的Swagger方法定义时,它不会尝试智能 .

相关问题