我正在 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 = "";
});
}
但是上面的代码没有工作,因为它返回实际的物理路径而不是虚拟路径。
- 上述代码的输出:C:/inetpub/wwwroot/myapp/swagger/v1/swagger.json
- 预期输出:http://myserver/MySite/swagger/v1/swagger.json
有谁知道如何在 .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/