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

时间:2019-03-01 16:21:58

标签: json iis asp.net-core swagger swagger-ui

我正在设置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上的托管方式有关的问题。

有想法吗?

3 个答案:

答案 0 :(得分:2)

尝试使用相对路径:

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

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

答案 1 :(得分:1)

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");
        }); 

答案 2 :(得分:1)

app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint($"./v1/swagger.json", "Api v1");
});