c# - 如何修复 .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 = "";
});
}
但是上面的代码不起作用,因为它返回实际的物理路径而不是虚拟路径。
- 上述代码的输出: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 中托管它,您需要在前面加上 ./ 。
我希望这个答案能节省您的时间!
推荐阅读
- ajax - VueJS - 通过道具传递数据与通过 ajax 获取数据的性能
- codenameone - 无法在 iOS 15 设备上安装 Codenameone 调试版本
- openlayers-6 - 如何从 openlayers 中的一系列特征中访问子特征
- azure - Azure 权限 - 天蓝色权限“无法连接到数据源”
- android - 如何将参数从留在 NavGraphA 中的片段传递到 NavGraphB 的起始目标片段?
- python-3.x - Django - 组合来自不同应用程序的 URL
- sharepoint - 在 DocuSign 模板中传递值
- javascript - 为什么 HEIC/HEIF 文件在 FileList 中有空白文件类型?
- javascript - 使用 Semantic-Ui React 从 Form.Select 中获取 ID
- c - 如何在 C 中“重载”scanf?