2017-03-13 33 views
3

我試圖調整在自動生成的Swagger定義中使用的模型的「displayName」。自定義生成的模型名稱 - Swagger UI

這隻會影響Swagger名稱,這意味着代碼中的名稱空間將保持不變,而從Swagger UI查看模型時,您會看到一個自定義名稱。

目前,從代碼返回的模型名稱是一個名稱空間,看起來像這樣:b.c.d.e.f,我想向代碼中添加一個屬性並「掩蓋」Swagger文檔的名稱,以便在文檔/ Swagger定義生成後,它將顯示爲CustomSwaggerName

我有幾個API(C#)使用工具,包括Swashbuckle(首選)和SwaggerGen,但現在,我只是想讓它在任何可能的情況下工作。

我使用似乎看起來是正確的屬性嘗試:

[ResponseType(typeof(Company)),DisplayName("NewCompany")] 
[SwaggerResponse(200,"NewCompany",typeof(object))] 

沒有運氣。我還瀏覽了SwashBuckle git repo,希望能找到一些東西。

一個圖像,應該有助於進一步解釋我想要達到的目標。 enter image description here

我知道這可能看起來像一個奇怪的用例,但它是爲我們的AWS API網關自動化編寫的工具,它將使用Swagger定義進行一些比較。

回答

0

答案是:使用IDocumentFilter:

private class ApplyDocumentFilter_ChangeCompany : IDocumentFilter 
    { 
     public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer) 
     { 
      if (swaggerDoc.definitions != null) 
      { 
       swaggerDoc.definitions.Add("Company123", swaggerDoc.definitions["Company"]); 
      } 
      if (swaggerDoc.paths != null) 
      { 
       swaggerDoc.paths["/api/Company"].get.responses["200"][email protected] = "#/definitions/Company123"; 
      } 
     } 
    } 

下面是代碼: https://github.com/heldersepu/SwashbuckleTest/commit/671ce648a7cc52290b4ad29ca540b476e65240e6

這裏是最後的結果: http://swashbuckletest.azurewebsites.net/swagger/ui/index#!/Company/Company_Get