如何获得MVC行动返回404

我有一个采取用​​于检索一些数据的string的操作。 如果这个string导致没有数据被返回(可能是因为它已被删除),我想返回一个404并显示一个错误页面。

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

什么是最好的方式去做这件事?

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

有多种方式可以做到这一点,

  1. 你是正确的,可以用你指定的方式分配它的公共aspx代码
  2. throw new HttpException(404, "Some description");

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

 return new HttpNotFoundResult("optional description"); 

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

 if (notWhatIExpected) { return HttpNotFound(); } 

要么

 if (notWhatIExpected) { return HttpNotFound("I did not find message goes here"); } 

代码:

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

Web.config文件

 <customErrors mode="On"> <error statusCode="404" redirect="/Home/NotFound" /> </customErrors> 

我用过这个:

 Response.StatusCode = 404; return null; 

在NerdDinner例如。 试试吧

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

上面的例子没有为我工作,直到我join下面的中间行:

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

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

我用:

 Response.Status = "404 NotFound"; 

这适用于我:-)

在.NET Core 1.1中:

 return new NotFoundObjectResult(null); 

你也可以这样做:

  if (response.Data.IsPresent == false) { return StatusCode(HttpStatusCode.NoContent); } 

请尝试下面的演示代码:

 public ActionResult Test() {  return new HttpStatusCodeResult (404,"Not found"); }