3

我已经为 ASP.NET MVC 3 中的一般情况实现了 404 处理,当找不到控制器/视图时。但是如果用户试图访问一些找不到的东西,应该如何在控制器内部处理呢?例如www.foo.bar/Games/Details/randomjunk将在里面调用这个GamesController

public ActionResult Details(string id) // id is 'randomjunk'
{
  if(DoesGameExist(id) == false)
    // Now what?

我可以做一个return Redirect('/Errors/Http404');,但这似乎不是正确的方法。您应该抛出异常还是其他?

在这种情况下,我们可以有一个特殊的观点,但首先我们需要一个可以应用于多个案例的好方法。

编辑:我想展示我已经拥有的一般情况下的友好 404 页面。

4

3 回答 3

9

你应该抛出 HttpException 404 :

throw new HttpException(404, "Page not Found");
于 2012-04-15T15:21:20.770 回答
5

编辑:显然,根据Darin Dimitrov,我以前所拥有的即使使用customErrors. 正如安东尼奥·巴库拉(Antonio Bakula )在另一个答案中所说,您必须这样做:

throw new HttpException(404, "Not found")

然后 customErrors 将起作用。

有一个内置的辅助方法被调用HttpNotFound,所以你可以这样做:

返回 HttpNotFound();

您还可以使用 HttpStatusCodeResult 显式返回 404:

返回新的 HttpStatusCodeResult(404);

HttpStatusCodeResult当您想要的代码没有特定的辅助方法或类时,它会很有帮助。

你的 Web.config 中也应该有这个:

<customErrors>
    <error statusCode="404" redirect="~/Custom404Page.html"/>
</customErrors>

您还可以有其他状态的附加行,以及一个defaultRedirect.

于 2012-04-15T15:13:45.587 回答
1

您可以返回一个 HttpStatusCodeResult。

return new httpStatusCodeResult(404);
于 2012-04-15T15:52:15.550 回答