Swagger запускается локально, но не на IIS, не разрешая базовый путь - PullRequest
0 голосов
/ 01 марта 2019

Я настраиваю Swagger для документирования своего API.

Я настроил SwaggerEndpoint с относительным путем к спецификации json, как показано ниже:

startup configuration

Когда я отлаживаю локально, все разрешается нормально.Но мой сайт просто работает как http://localhost:44348/index.html.

При развертывании в IIS, который находится на виртуальном пути, он разрывается:

not resolving swagger.json

  1. Обратите внимание, чтоURL-адрес в браузере содержит /imaging4castapi_UAT/ как часть пути
  2. Обратите внимание, что в фактическом запросе swagger.json отсутствует базовая часть пути.

Вот что яя пробовал:

  1. Я пытался удалить переопределение RoutePrefix.Но это не решает.
  2. Я пытался использовать путь к приложению, например "~/swagger/...", но он переводится сервером на элементы представления, такие как страницы Razor и css, и не работает здесь в Startup.

Я изо всех сил пытаюсь понять, если это проблема установки клиента или что-то, связанное с тем, как мой сайт размещен в IIS.

Мысли?

Ответы [ 3 ]

0 голосов
/ 09 марта 2019

Вот мой конфиг Swagger для одного приложения PRD.Надеюсь, это поможет

 public static IServiceCollection AddSwaggerConfig(this IServiceCollection services, IHostingEnvironment env,
            string title, string version)
            => services.AddSwaggerGen(c =>
            {
                //Ensure XML Document File of project is checked for both Debug and Release mode
                c.IncludeXmlComments("Your App.xml");
                //Display Enum name
                c.DescribeAllEnumsAsStrings();

                //c.OperationFilter<AddRequiredHeaderParameter>();

                    //Authentication for Bearer
                    c.AddSecurityDefinition("Bearer",
                        new ApiKeyScheme
                        {
                            In = "header",
                            Description = "Please enter JWT with Bearer into field",
                            Name = "Authorization",
                            Type = "apiKey"
                        });

                    c.AddSecurityRequirement(new Dictionary<string, IEnumerable<string>>
                    {
                        {"Bearer", Enumerable.Empty<string>()}
                    });


                c.SwaggerDoc(version, new Info
                {
                    Title = title,
                    Version = version,
                    Description = "",
                    Contact = new Contact
                    {
                        Email = "Support@ABC.com",
                        Name = ""
                    }
                });
            });

Файл запуска

             app.
                //Swagger
                .UseSwagger()
                .UseSwaggerUI(c =>
                {
                    c.SwaggerEndpoint($"./{_version}/swagger.json", Title);
                });

Версия - это переменная приложения из файла конфигурации, которая будет отфильтрована по CI / CD

0 голосов
/ 10 марта 2019

Swagger не поддерживает виртуальный каталог по умолчанию.Попробуйте добавить это в свой Startup.cs

    app.UseSwagger(c =>

        {   
            c.RouteTemplate = "virtual_path/{documentName}/swagger.json";
        });
     app.UseSwaggerUI(c =>

        {
            //Include virtual directory 
         c.RoutePrefix = "virtual_path";// add your virtual path here.

            c.SwaggerEndpoint("v1/swagger.json", "Api v1");
        }); 
0 голосов
/ 04 марта 2019

Попробуйте использовать относительный путь:

setupAction.SwaggerEndpoint("../swagger/Imaging4CastApiSpecification/swagger.json", "4Cast API");

Обратите внимание на ответ и объяснение следующего вопроса: SwashBuckle

...