如何让MVC动作返回404

Pau*_*les 135 error-handling asp.net-mvc http-status-code-404

我有一个动作,它接受一个用于检索一些数据的字符串.如果此字符串导致没有返回数据(可能因为它已被删除),我想返回404并显示错误页面.

我目前只是使用返回一个特殊视图,该视图显示特定于此操作的友好错误消息,指出未找到该项目.这样可以正常工作,但理想情况下会返回404状态代码,以便搜索引擎知道此内容不再存在,并且可以将其从搜索结果中删除.

最好的方法是什么?

它是否像设置Response.StatusCode = 404一样简单?

Ste*_*ack 144

在ASP.NET MVC 3及更高版本中,您可以从控制器返回HttpNotFoundResult.

return new HttpNotFoundResult("optional description");
Run Code Online (Sandbox Code Playgroud)

  • 如果从控制器内返回,还有一个名为`HttpNotFound()`的便捷方法.所以你可以返回`return HttpNotFound("optional description")`. (5认同)
  • 用法:`return new HttpNotFoundResult("optional description");` (4认同)

Dew*_*wfy 105

有多种方法可以做到,

  1. 您在通用的aspx代码中是正确的,它可以按指定的方式分配
  2. throw new HttpException(404, "Some description");

  • 我最终做了:Response.StatusCode = 404; Response.TrySkipIisCustomErrors = true; return View("MyCustomView"); 这在我的情况下完美无缺. (20认同)

Gon*_*ing 59

在MVC 4及更高版本中,您可以使用内置的HttpNotFound帮助器方法:

if (notWhatIExpected)
{
    return HttpNotFound();
}
Run Code Online (Sandbox Code Playgroud)

要么

if (notWhatIExpected)
{
    return HttpNotFound("I did not find message goes here");
}
Run Code Online (Sandbox Code Playgroud)


小智 25

代码:

if (id == null)
{
  throw new HttpException(404, "Your error message");//RedirectTo NoFoundPage
}
Run Code Online (Sandbox Code Playgroud)

Web.config文件

<customErrors mode="On">
  <error statusCode="404" redirect="/Home/NotFound" />
</customErrors>
Run Code Online (Sandbox Code Playgroud)


Wou*_*out 12

我用过这个:

Response.StatusCode = 404;
return null;
Run Code Online (Sandbox Code Playgroud)

  • 但是,在 asp.net 中,这种方法不是一个好的解决方案,对吗?因为网页会显示服务器的所有相关敏感信息。 (3认同)
  • 一个异常的处理时间不到一毫秒。与仅仅建立和返回 HTTP 连接的几百毫秒相比,它毫无意义。抛出 HttpException 或返回 HttpNotFoundResult,手动设置状态码并返回 null 很糟糕。 (2认同)

Rob*_*sen 8

如果您正在使用.NET Core,则可以 return NotFound()


cem*_*cem 5

在NerdDinner例如.试试

public ActionResult Details(int? id) {
    if (id == null) {
        return new FileNotFoundResult { Message = "No Dinner found due to invalid dinner id" };
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)


gan*_*ers 5

在我添加下面的中间行之前,上述示例都不适合我:

public ActionResult FourOhFour()
{
    Response.StatusCode = 404;
    Response.TrySkipIisCustomErrors = true; // this line made it work
    return View();
}
Run Code Online (Sandbox Code Playgroud)

  • 你是认真地告诉我简单的 `return HttpNotFound();` 对你不起作用吗?你的系统多少岁了? (2认同)