2016-10-28 3 views
0

Мы реализовали Swashbuckle в нашем проекте Web Api, и я замечаю, что тестовая жгут SwaggerUI отображает ту же самую информацию для любой версии, указанной в адресе. Более конкретно, он отображает информацию о swagger, для которой когда-либо VersionInfoBuilder появляется сначала в SwaggerConfig.Пользовательский интерфейс Swashbuckle отображает ту же информацию для разных версий

Так, например, если я перехожу к «/ preview/swagger/index» - отображаемый пользовательский интерфейс является всей информацией v1, не связанной с версией «preview».

Что я здесь делаю неправильно?

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 (по адресу preview/docs/index), но вы должны указать интерфейс Swagger по другой спецификации. Просто введите http://yourserver:yourport/preview/swagger в поле ввода в заголовке и нажмите «Исследуйте». Пользовательский интерфейс Swagger теперь загрузит и отобразит спецификацию предварительного просмотра.

enter image description here

+0

Интересно. Но это кажется странным, если не сказать больше. Почему EnableSwaggerUi() даже беспокоился с {apiVersion} как частью своего шаблона маршрута, а затем даже не отображал версию, продиктованную URL-адресом? Зачем пользователю нужно отключить текстовое поле, а затем нажать кнопку «исследовать»? Я вижу, что есть опция EnableDiscoveryUrlSelector() - это также нежелательно. Просто попросите интерфейс Swagger отобразить правильную информацию на основе текущего маршрута и его значений. – Mike

Смежные вопросы