2016-11-01 121 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用於包括特定揚鞭文檔中的作用。

相關問題