【问题标题】:httpErrors not redirecting to correct page with MVC 3httpErrors 未使用 MVC 3 重定向到正确的页面
【发布时间】:2012-04-24 11:19:48
【问题描述】:

我正在尝试在我的 MVC 3 Web 应用程序中设置 http 自定义错误页面。我在 web.config 中添加了以下内容:

<httpErrors errorMode="Custom" defaultResponseMode="ExecuteUrl" defaultPath="/Error/404">
  <clear />
  <error statusCode="500" path="/Error/404"
</httpErrors>

当请求发生 500 错误时,我希望这会重定向用户 my.domainname.com/Error/404。

我有一个错误控制器,其中包含一个名为错误的操作,我已将 404 请求映射到此操作。

当我在网站上强制出现 500 错误(由 chrome 开发人员工具网络选项卡验证)时,我收到一个空白页面,其中包含以下消息:

“由于发生内部服务器错误,页面无法显示。”

如果我从 web.config 中删除 httpErrors 部分,那么我会收到实际的异常消息。因此,我在 web.config 中的 httpErrors 部分必须正常工作,我只是不明白如何正确设置它。

以下是我选择的属性列表以及原因:

errorMode="Custom":这样我就可以看到自定义错误页面并在将其更改为仅限本地之前验证它是否正常工作。

defaultResponseMode="ExecuteUrl":这应该允许我指定一个服务器相对 url 作为路径,这听起来像我想要的,因为我想点击控制器操作。

defaultPath="/Error/404":如果我没有指定,我想要请求的相对 url。

编辑:

我应该补充一点,该站点在 IIS 7.5 上运行。我也不希望使用该标签,因为它旨在与 IIS 6 一起使用,并且应该用于 IIS 7+。

【问题讨论】:

    标签: asp.net-mvc-3 custom-error-pages http-error custom-errors


    【解决方案1】:

    尝试改用 web.config(system.web 内部)中的 customErrors 部分。

    http://msdn.microsoft.com/en-us/library/h0hfz6fc.aspx

    例如

    <customErrors mode="On">
            <error statusCode="404" redirect="Error/404" />
            <error statusCode="500" redirect="Error/500" />
        </customErrors>
    

    【讨论】:

    • 对不起,我会更新我的问题。它确实适用于 customErrors 部分,但这不是一个理想的解决方案,因为它们现在是一个遗留选项并且专为 IIS 6 设计。
    • 设置 defaultResponseMode="Redirect" 和设置绝对网址的路径是否有效?我知道这不是您想要的,因为使用相对路径会更好,但可能有助于调试问题。
    • 在这种情况下我无法设置绝对路径,因为子域可以变化并且可以由用户更改。所以 my.domainname.com 可能是 test.domainname.com 等。所以我需要路径是相对的。
    【解决方案2】:

    应该像Controller/Action/Id。在您的情况下,缺少 Action。检查以下示例并根据您的操作方法进行更改...

    <system.web>
        <customErrors mode="On" defaultRedirect="/Error/Index/" >
          <error statusCode="401" redirect="/Error/NoAccess/" />
          <error statusCode="404" redirect="/Error/NotFound/" />
        </customErrors>
        ....
    </system.web>
    

    【讨论】:

    • 我的控制器是错误的,我在此控制器上的操作也是错误的,但我已将 404 映射到此操作。因此 Error/404 应该可以工作,如果我直接提出这个请求:my.domainname.com/Error/404 会显示正确的页面。我还更新了我的问题以指定我不想使用 CustomErrors 部分作为解决方案。干杯!
    • 看看这里。它可能会帮助你stackoverflow.com/questions/3554844/…
    猜你喜欢
    • 2018-11-21
    • 2017-01-18
    • 2011-08-11
    • 2018-06-08
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多