问题:
.NET Core WebAPI 应用程序部署到IIS服务器上运行提示“Not Found /swagger/v1/swagger.json”,但在Visual Stuido工具能正常跑起来。
注:当前WebAPI应用程序是部署在IIS服务器>> Default Web Site 网站下的“应用程序”。
原因:
由IIS在IISExpress\ApplicationURL中的主机名之后的(或没有)附加路径进行托管,例如:
但通过IIS在临时环境上进行部署,主机名之后会增加附加路径。
如:
http://staginghost/char/swagger
注:“char”就是会加的路径。
解决方案:
在startup.cs类配置SwaggerUI中间件,指定读取 /swagger/v1/swagger.json 文件路径增加相对路径的判断处理,如下:
- app.UseSwaggerUI(c =>
- {
- string swaggerJsonBasePath = string.IsNullOrWhiteSpace(c.RoutePrefix) ? "." : "..";
- c.SwaggerEndpoint($"{swaggerJsonBasePath}/swagger/v1/swagger.json", "My API");
- });