Swagger在本地运行但不在IIS上运行,而不是解析基本路径

问题描述 投票:2回答:3

我正在设置Swagger来记录我的API。

我已经使用规范json的相对路径设置了SwaggerEndpoint,如下所示:

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上托管的方式有关。

思考?

json iis asp.net-core swagger swagger-ui
3个回答
3
投票

尝试使用相对路径:

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

请注意以下问题的答案和解释:SwashBuckle


2
投票

这是我的一次PRD应用程序的Swagger配置。希望能帮助到你

 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 = "[email protected]",
                        Name = ""
                    }
                });
            });

启动文件

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

该版本是Config文件中的app变量,将由CI / CD过滤


2
投票

默认情况下,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");
        }); 
© www.soinside.com 2019 - 2024. All rights reserved.