今天我一直在与一个非常奇怪的问题作斗争。我每天都在开发一个 ASP.NET MVC3 Web 应用程序,它曾经是 ASP.NET 4。它现在不是一半 MVC3 和一半 ASP.NET 4 都在同一个应用程序下运行。这一切都很好。
今天我们设置了一个全新的暂存环境(Server 2008 R2),部署了代码并运行了应用程序。只有在尝试访问任何 MVC 页面时出现 HTTP 404 错误,所有 aspx 页面都可以正常工作。为了证明问题是环境问题,我们将相同的代码部署到开发盒上的新应用程序中,并且运行顺利。
在花了一整天时间确保两个环境完全相同(IIS 角色服务、Windows 更新、已安装的应用程序......一切)之后,我在 404 错误页面上注意到请求的处理程序是“StaticFile”。
经过一番谷歌搜索后,我发现了标题中的选项
<system.webServer><modules runAllManagedModulesForAllRequests="true"></modules></system.webServer>
这现在有效,所以我假设没有它就不会调用用于非静态路由的模块(如果我很天真,请原谅我)。
问题是,在我们的开发环境中,web.config 没有这个属性。
那么为什么没有它在一台服务器上而不是在另一台服务器上工作。当然,为所有请求调用所有模块的效率较低。
如果有人对为什么会发生这种情况有任何想法,我将永远感激不尽,因为尽管我们的登台环境现在可以工作,但我讨厌不完全了解您。
谢谢你!