【发布时间】:2019-06-21 18:10:28
【问题描述】:
我正在 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"); 不起作用。任何线索都会有所帮助。
【问题讨论】:
-
根据 Swashbuckle 文档,您应该能够只使用“./swagger/v1/swagger.json”而不是预先添加托管 URL。那没有用吗?编辑为在路径前面添加句点,因为我注意到它没有在域的根目录下运行。
-
是的,我也尝试过,但没有成功。获取 swagger.json 文件失败。
-
我有类似的问题,但原因可能不同。如果有人想可以查看我的经验here
标签: c# asp.net-core asp.net-core-2.2