【问题标题】:How should asp.net custom errors work?asp.net 自定义错误应该如何工作?
【发布时间】:2010-06-24 23:41:46
【问题描述】:

我通过关注this article 在我的 asp.net mvc 应用程序中实现了自定义错误。我注意到的是,如果我转到http://www.mysite.com/some-non-existent-controller-and-action,我会按预期得到我的 404 错误页面。但是,看看 firebug 发生了什么,我发现我得到了一个 302 Found 对不存在页面的响应,然后重定向到我的自定义错误页面,然后返回 404(并显示自定义错误页面)。这是正确的吗?我认为第一次返回的 302 不是很好,尤其是从 SEO 的角度来看,这也许我需要重新考虑一下我是如何实现的。

【问题讨论】:

  • 我以前从未注意到这一点,但我刚刚确认这发生在我的 MVC2 应用程序上并实现了自定义错误。
  • 查看一些解决方案,我不相信您可以同时使用这些解决方案和 customErrors。我想弄清楚如何让 customErrors 在没有 302 的情况下直接返回 404。有没有办法做到这一点?

标签: asp.net-mvc-2 custom-error-pages


【解决方案1】:

处理 404 的最佳指南(我认为)可以在 this answer 中找到。基本上有多种方式可以发生 404:

  1. 不存在路由 - 符合 catch all 规则。
  2. 匹配路由但未找到控制器 - 对于具有动态控制器名称的规则 - {controller}/{action}/{parameter} 规则。
  3. 找到路线,但未找到操作 - 通过 HandleUnknownAction 覆盖处理。
  4. 找到路由和操作,但无法转换参数 - 符合 catch all 规则。

链接的答案基本上设置了一个控制器,可以从代码中的任何点执行而无需重写 URL - 这就是你想要的。

此外,您还应该考虑处理未处理的异常和错误的 URL(例如包含尖括号等不安全字符的 URL)。在那种特殊情况下,您必须重写 URL,否则您根本无法呈现响应。这些特殊的请求有点棘手,我在博客中提到了 here

【讨论】:

  • 谢谢,这看起来不错。我会好好看看和反馈
【解决方案2】:

您是否按照页面底部的建议添加了映射到您的“未找到”操作的“包罗万象”路线:

routes.MapRoute("Catch All", "{*path}",
    new { controller = "Error", action = "NotFound" });

如果您将此设置为您添加的最后一条路由,任何“未知” URL 将直接映射到您在 ErrorController 上的“未找到”操作,您可以直接从那里返回“未找到”视图,没有重定向必填。

【讨论】:

    猜你喜欢
    • 2013-11-28
    • 2012-12-04
    • 2017-02-10
    • 2013-01-10
    • 1970-01-01
    • 2013-06-08
    • 2018-12-11
    • 1970-01-01
    • 2010-11-03
    相关资源
    最近更新 更多