(路由问题)在 IIS 上托管 .NET Core 5.0 MVC 应用程序

(Routing problem) Hosting .NET Core 5.0 MVC application on IIS

我在部署 WebApi 时遇到问题 and/or ASP.NET 针对 .NET 5 框架的 MVC 应用程序。

我创建了站点和应用程序池并设置了绑定。应用程序池设置为无托管代码,管道设置为集成。 我使用的配置与我们用于所有其他 .NET Core 3.x 应用程序的配置相同 - 我们有 20-30 个应用程序和 WebApis。

当我尝试打开 URL 时,服务器出现 404 错误。我发现必须存在路由问题。当我调用特定操作 (https:///myurl/home/index) 时,我确实从服务器得到了正确的响应。

我在 IIS 网络服务器上安装了 ASP.NET Core Runtime 5.0.0(托管包)。最初,我在开始使用 .NET 5 RC1 创建的 .NET 5 WebApi 时遇到此错误。 所以我创建了一个新的默认 MVC 应用程序并将其部署到同一台服务器。这里有同样的问题。

使用 IIS Express localy 它工作得很好。

有什么想法吗?

我找到了问题的根源。 如果环境不是开发环境,一个新创建的 .NET 5 web api 项目默认隐藏 swagger:

 if (env.IsDevelopment())
 {
     app.UseDeveloperExceptionPage();
     app.UseSwagger();
     app.UseSwaggerUI(c =>
         {
             c.SwaggerEndpoint("/swagger/v1/swagger.json", "Version 1.0");
             c.RoutePrefix = string.Empty;
         });
 }

这当然是 wep api 本身工作的原因(例如邮递员),但是当我们尝试在浏览器中打开 Swagger 时出现 404 错误的原因。

所以在我的例子中,我只在生产中禁用 Swagger:

 if (!env.IsProduction())
 {....}