首页 > 解决方案 > 如何修复 .net core 2.2 应用程序中未找到的 swagger.json

问题描述

我正在 IIS 服务器上部署我的 .net 核心应用程序,并在 swagger UI 中遇到未找到 swagger.json 的问题。当我在本地(开发环境)运行它时,一切正常,但是当我将它部署在 IIS 服务器上时,它找不到 swagger.json 文件。

以前我在 .net core 2.1 应用程序中遇到过这个问题,我通过编写下面的代码来解决它以获取虚拟基本路径。

string basePath = Environment.GetEnvironmentVariable("ASPNETCORE_APPL_PATH");
            basePath = basePath == null ? "/" : (basePath.EndsWith("/") ? basePath : $"{basePath}/");

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

我试过下面的代码来解决它:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
 {
   app.UseSwaggerUI(c =>
     {
      c.SwaggerEndpoint($"{env.ContentRootPath}swagger/v1/swagger.json", "Test.Web.Api");
       //OR
      c.SwaggerEndpoint($"{env.WebRootPath}swagger/v1/swagger.json", "Test.Web.Api");
      c.RoutePrefix = "";
     });
 }

但是上面的代码不起作用,因为它返回实际的物理路径而不是虚拟路径。

有谁知道如何在 .net core 2.2 中获取虚拟路径,因为Environment.GetEnvironmentVariable("ASPNETCORE_APPL_PATH");它不起作用。任何线索都会有所帮助。

标签: c#asp.net-coreasp.net-core-2.2

解决方案


我通过将以下代码放入我的 .net 核心应用程序中解决了我的问题。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
 {
   app.UseSwaggerUI(c =>
     {
      c.SwaggerEndpoint("./swagger/v1/swagger.json", "Test.Web.Api");
      c.RoutePrefix = string.Empty;
    });
 }

根据swashbuckle文档,如果您在 IIS 中托管它,您需要在前面加上 ./ 。

我希望这个答案能节省您的时间!


推荐阅读