我是第一次同时处理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错误?
答案 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(错误记录模块和处理程序):