【问题标题】:Correctly send user to 404 if dynamic content is not found (ASP.NET MVC)如果找不到动态内容,则正确将用户发送到 404 (ASP.NET MVC)
【发布时间】:2012-04-27 03:22:02
【问题描述】:

我已经为 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 页面。

【问题讨论】:

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


    【解决方案1】:

    你应该抛出 HttpException 404 :

    throw new HttpException(404, "Page not Found");
    

    【讨论】:

    • 这正是我想要的!用户最终到达 '/Errors/Http404?aspxerrorpath=/Games/Details/randomjunk',看到一个不错的页面,并且错误记录在服务器上。
    【解决方案2】:

    编辑: 显然,根据Darin Dimitrov,我以前所拥有的即使使用customErrors 也不起作用。作为另一个答案中的 Antonio Bakula says,您必须这样做:

    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

    【讨论】:

    • 是的,我试过了,但这会给用户一个 404 而不是带有错误消息的正确网页。 IE。在 Chrome 中尝试时,Chrome 会显示“糟糕!此链接似乎已损坏。”而不是看到我友好的“找不到该页面,抱歉”消息。
    • @John-Philip,您还需要在 Web.config 中配置它。我会找到确切的 XML。
    • 这个?
    • 或者你可以抛出一个带有代码 404 的 HttpException,但是这种方法看起来确实更干净
    • @John-Philip,您使用的是 IIS 7 吗?如果是这样,请尝试this question
    【解决方案3】:

    您可以返回一个 HttpStatusCodeResult。

    return new httpStatusCodeResult(404);
    

    【讨论】:

    • 这会向访问者发送 404 Http 结果,这会使浏览器显示它自己的“未找到页面”,而不是由网站处理并显示正确的品牌“抱歉,我们找不到你在找什么”页面。
    猜你喜欢
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 2011-12-08
    • 2017-08-16
    相关资源
    最近更新 更多