1

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

4

2 回答 2

1

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

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

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

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

于 2010-06-25T00:28:45.383 回答
0

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

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

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

于 2010-06-25T00:03:50.720 回答