我希望我的ASP.NET MVC应用程序将失败的请求重定向到某个控制器的匹配操作方法。这在我运行Windows 7的开发计算机上运行良好,但在我运行Windows 2008 R2的生产计算机上却没有。
我按如下方式设置了我的web.config:
<customErrors mode="On" defaultRedirect="/Error/ServerError/500">
<error statusCode="403" redirect="/Error/AccessDenied" />
<error statusCode="404" redirect="/Error/FileNotFound" />
</customErrors>
此customErrors部分可以在我的两台计算机(生产和开发)上正常运行500内部服务器错误。
它也适用于我的开发机器上的404错误。
但是,它无法在生产计算机上正确重定向404错误。而不是/ Error / FileNotFound,我得到了IIS 7附带的标准404页面。
这可能是什么问题?
答案 0 :(得分:1)
如果其他人遇到同样的问题:解决方案是将httpErrors元素添加到system.webServer部分:
<httpErrors>
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/Error/FileNotFound" responseMode="ExecuteURL" />
</httpErrors>
在Windows 2008 R2中,也可以通过IIS控制面板完成此操作(请参阅“错误页面”)。
答案 1 :(得分:1)
请参阅What is the difference between customErrors and httpErrors?
另见http://msdn.microsoft.com/en-us/library/ms690576.aspx
customErrors 与ASP.Net有关。 httpErrors 是IIS7的新功能(您在我假设的两个实例中都使用它)。
问题很可能与您的IIS Pipeline模式有关。也许你的产品可能在IIS Classic Pipeline Mode中运行?
修改的
反过来说。在集成管道模式下,不使用 customErrors 标记。