2016-11-01 122 views
2

我正在构建一个将托管多个控制器(微服务)的REST服务。总的来说,让我们打电话给服务“鲍勃”。所以Swagger会显示“Bob”/“Bob Microservices的集合”。然后列出控制器名称。现在,它只是显示XYZ,ABC等等。有没有办法让我们可以展示“XYZ - XYZ API的集合”或类似的东西?Swagger(Asp.Net Core)是否有控制器描述?

似乎像swagger显示///方法摘要,但不在控制器上。

+0

快速提示:多个控制器当然不是微服务 –

+0

@KierenJohnstone - 从这个意义上说,他们就是这么做的。显然不是纯粹的REST ...但我们将在路由器指定的控制器中拥有多个POST方法。所以你可以发布到/ Bob/XYZ/method1,/ Bob/XYZ/method2等,这就是为什么他们称之为微服务。 – SledgeHammer

+0

这只是一个Web API,可能不使用REST。微服务是完全不同的东西:一组独立版本,构建和(通常是自动)部署的服务,每个服务通常都有自己的数据存储和有界的上下文。你只是在谈论“控制器” –

回答

4

有没有一种办法也许有招摇秀 “XYZ - XYZ API的集合”

是。这是最简单的方法之一。 Swagger的ASP.NET Core版本利用了ApiExplorerSettings属性。您可以设置GroupName

public class BobController 
{ 
    [ApiExplorerSettings(GroupName="XYZ - A collection of XYZ APIs")] 
    public IActionResult MyAction() 
    { 
     ... 
    } 
} 

组名出现在Swagger用户界面中,该组的操作列在下面的操作中。

enter image description here

编辑:这是基于大锤的评论的想法。

Swagger ASP.NET Core使用IApiDescriptionGroupCollectionProvider来构建其描述组。我们可以使用默认的ApiDescriptionGroupCollectionProvider来实现我们自己的灵感,并在Startup.ConfigureServices期间注册我们的提供商。我们的实施将使ApiDescriptionGroups()方法返回与每个动作的控制器关联的GroupName。然后我们可以在每个控制器上放置ApiExplorerSettings属性,而不是放在每个动作上。

+0

谢谢肖恩,好像我需要把它放在控制器的每个方法?我试着把它放在课堂上(因为属性表示它允许),但是Swagger没有选择它。 – SledgeHammer

+0

@SledgeHammer是的。我们确实需要将该属性放在控制器中的每个方法上。如果时间允许,我会研究一种在控制器级应用它的方法。 –

+0

@SledgeHammer查看想法的编辑。 –

1

您也可以使用SwaggerOperationAttribute为:

public class MyController 
{ 
    [SwaggerOperation(Tags = new[] { "XYZ - A collection of XYZ APIs" })] 
    public IActionResult MyAction() 
    { 
    } 
} 

在Swashbuckle.AspNetCore版本1.0.0-RC3的ApiExplorerSettingsAttribute用于包括特定扬鞭文档中的作用。

相关问题