【问题标题】:(Routing problem) Hosting .NET Core 5.0 MVC application on IIS(路由问题)在 IIS 上托管 .NET Core 5.0 MVC 应用程序
【发布时间】:2020-11-12 09:30:20
【问题描述】:

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

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

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

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

使用 IIS Express 本地化它工作得很好。

有什么想法吗?

【问题讨论】:

  • 我们遇到了类似的问题。一个简单的 Web API 在本地运行流畅,但托管在 IIS 上,它从不响应。应用程序池运行良好,在(Windows)事件/日志中找不到任何内容
  • 你能告诉我详细的 404 错误页面吗?您可以尝试在 global.asax 中添加一个 Application_OnError 并在那里检查 server.GetLastError。
  • 当我在网络服务器上打开应用程序时,它看起来不错。当我从本地网络中的另一台机器打开应用程序时,我会收到错误消息。我注意到当我输入 URL (myapplication.local) 时,服务器会重定向到 myapplication.local/index.html,这是错误的。默认路由应该是myapplication.local/home/index
  • 你在你的 IIS 中使用 url rewrite 吗?您可以尝试使用失败的请求跟踪来查看请求的详细信息。

标签: asp.net-mvc iis .net-5


【解决方案1】:

我找到了问题的根源。 新创建的.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())
 {....}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    相关资源
    最近更新 更多