c# - 如何修复 .net core 2.2 应用程序中找不到的 swagger.json

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

我正在 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"); 不工作。任何线索都会有所帮助。

最佳答案

我已通过将以下代码放入我的 .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 中托管它,则需要在 ./前面添加文档。

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

关于c# - 如何修复 .net core 2.2 应用程序中找不到的 swagger.json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54407102/

相关文章:

c# - 从列表中加入 ID

c# - 在代码隐藏中将表添加到 FlowDocument

c# - 在 net core 2.2 中隐藏 swagger 不良响应示例模型

asp.net-core - webpack 4 aspnetcore 2.2 HMR 未在浏览器中重新加载

c# - vs 2017 asp.net core 2.2 中缺少上下文菜单来添加 Controller

c# - 如何在asp.net mvc4中发送电子邮件

c# - 将 SharpKit 的 JsObject 转换为 TypeScript

entity-framework - 如何修复 EntityFrameworkCore 中的数据迁移错误?

c# - 如何更改 Entity Framework Core 2.2 中的 ILazyLoader 实现?

javascript - ASP.NET Core 失败的 AJAX Post 请求