其他错误找到我的Error.cshtml,为什么404错误找不到Error.cshtml?

时间:2011-03-09 00:30:19

标签: asp.net-mvc-3 asp.net-mvc-routing http-status-code-404

我是第一次同时处理ASP.NET,MVC 3,Web开发。请耐心等待,因为我知道这个问题已经从不同角度进行了大量讨论。我仍然没有找到我的具体问题的答案:为什么我的应用程序在404发生时找不到我的Error.cshtml文件,当它发现它与其他错误一样好的时候?

(环境:Win 7 64位,IIS7,SQL 2008 Express,VS2010,ASP.NET 4,MVC3,EF v4)

我有一个控制器WorkerController.cs,可以正确地从数据库读取和写入。如果我更改数据库名称而不更新我的DbContext,它会给我一个错误。当我将web.config更改为始终显示自定义错误时,显示/Views/Shared/Error.cshtml文件。

有一个FooController.cs文件。如果我去/ Foo,我会得到404错误,正如预期的那样。它告诉我它找不到资源/ Foo。

当我设置customErrors mode =“On”并向/ Foo发出http请求时,我收到404错误,指出无法找到/Error.cshtml。

我正在搜索和阅读讨论使用指定控制器处理错误的各种方法的帖子,但我真的想知道我错过了什么。为什么它会为其他错误找到/Error.cshtml,而不是404错误?

1 个答案:

答案 0 :(得分:8)

除了设置customErrors="On"之外,您是否定义了404错误的特定重定向?

例如,如果您有ErrorController设置web.config,例如:

<customErrors mode="On" defaultRedirect="/error/Problem">
    <error statusCode="404" redirect="error/FileNotFound"/>
</customErrors>

或者你更喜欢静态html页面来解决你的错误:

<customErrors mode="On" defaultRedirect="Problem.html">
  <error statusCode="404" redirect="FileNotFound.html"/>
</customErrors>

您可能需要查看其他问题以获取更多信息: ASP.NET MVC HandleError

为了改进MVC中的错误处理,您还可以查看ELMAH(错误记录模块和处理程序):