【问题标题】:Naming AutoRest generated method names using Swagger使用 Swagger 命名 AutoRest 生成的方法名称
【发布时间】:2016-09-20 13:33:43
【问题描述】:

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

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

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

    [SwaggerOperation("GetResources")]

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    只需添加一个

    @using TheNameSpace.OfYour.Client.Extensions
    

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2018-02-24
        • 2022-10-24
        • 1970-01-01
        • 2019-03-04
        • 1970-01-01
        • 2020-10-21
        • 2021-11-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多