【问题标题】:Other errors find my Error.cshtml, why doesn't 404 error find Error.cshtml?其他错误找到我的Error.cshtml,为什么404错误找不到Error.cshtml?
【发布时间】:2011-07-11 12:52:24
【问题描述】:

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

(环境:Win 7 64bit、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 错误?

【问题讨论】:

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


    【解决方案1】:

    除了设置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(错误记录模块和处理程序):

    【讨论】:

    • 塞尔吉,感谢您的回复。我用静态条目尝试了 statusCode="404",但仍然找不到。也许错误正在冒泡到 IIS?
    • 嗨,JCii,你用HandleError 属性标记你的控制器了吗?
    • 我做了,但那是针对控制器存在的情况。我刚刚创建了一个新的 MVC3 Web 应用程序,我唯一修改的是 web.config。我尝试了几个不同的版本: 我试过 /Views /Shared 和 /Shared 用于 Error.cshtml。我尝试使用不存在的控制器 (localhost/foo),但我不断收到 YSOD 404 错误...
    • 可能是这样: 注意:仅当对 ASP.NET 引擎处理的资源发出请求时,才会显示自定义错误页面。 ... 默认情况下,IIS Web 服务器处理对静态内容(如图像和 HTML 文件)的请求,而不调用 ASP.NET 引擎。因此,如果用户请求一个不存在的图像文件,他们将返回 IIS 的默认 404 错误消息,而不是 ASP.NET 的配置错误页面。 asp.net/hosting/tutorials/displaying-a-custom-error-page-cs
    • 当我看到你用来尝试强制 404 的 url 时,我想在你的第二条评论中添加一些内容。如果你去 localhost/foo 那么你永远不会进入你的应用程序,所以你总是会得到一个通用的 IIS 错误。在任何情况下,您都应该访问 localhost/myapp/foo。请问YSOD到底说了什么?
    猜你喜欢
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 2015-09-06
    相关资源
    最近更新 更多