2016-10-28 41 views
0

我們已經在Web Api項目上實現了Swashbuckle,並且我注意到SwaggerUI測試工具顯示地址中指定的任何版本的完全相同的信息。更具體地說,它顯示了SwaggerConfig中第一個VersionInfoBuilder最先出現的swagger信息。Swashbuckle UI顯示不同版本的相同信息

因此,例如,如果我導航到「/ preview/swagger/index」 - 顯示的UI是與版本'preview'無關的所有v1信息。

我在這裏做錯了什麼?

public class SwaggerConfig 
{ 
    private SwaggerConfig() { } 

    public static void Register() 
    { 
     var thisAssembly = typeof(SwaggerConfig).Assembly; 
     GlobalConfiguration.Configuration 
      .EnableSwagger("{apiVersion}/swagger", c => 
      { 
       c.MultipleApiVersions(
        (apiDesc, version) => 
        { 
         var path = apiDesc.RelativePath.Split('/'); 
         var pathVersion = path[0]; 

         return CultureInfo.InvariantCulture.CompareInfo.IndexOf(pathVersion, version, CompareOptions.IgnoreCase) >= 0; 
        }, 
        vc => 
        { 
         vc.Version("v1", "Api - v1"); 
         vc.Version("preview", "Api - Preview"); 
        }); 
      }) 
      .EnableSwaggerUi("{apiVersion}/swagger/{*assetPath}", c => 
      { 
       c.DisableValidator(); 
      }); 
    } 
} 

回答

1

我不認爲配置錯了,只是您的期望不正確。

您不必導航到另一個Swagger UI(在preview/docs/index),但您必須指向另一個規範的Swagger UI。只需在標題的輸入框中輸入http://yourserver:yourport/preview/swagger,然後按瀏覽。 Swagger UI現在將加載並顯示預覽規範。

enter image description here

+0

有趣。但至少可以說這很奇怪。爲什麼EnableSwaggerUi()甚至會打擾{apiVersion}作爲其路由模板的一部分,然後甚至不顯示url所指示的版本?爲什麼用戶不得不關閉文本框然後點擊探索?我發現EnableDiscoveryUrlSelector()有一個選項 - 這也是不希望的。只需要Swagger UI根據當前路線及其值顯示正確的信息。 – Mike

相關問題