如何让 MVC 行动返回404

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

我目前只是使用 return 一个特殊视图,它显示一个友好的错误消息,该消息特定于此操作,表示没有找到该项目。这工作很好,但理想情况下希望返回一个404状态码,这样搜索引擎知道这个内容不再存在,可以从搜索结果中删除它。

最好的办法是什么?

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

110787 次浏览

有很多种方法,

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

我用:

Response.Status = "404 NotFound";

这对我有用: -)

试试

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

我用过这个:

Response.StatusCode = 404;
return null;

密码:

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

Web.config

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

在 ASP.NET MVC 3及以上版本中,您可以从控制器返回 结果

return new HttpNotFoundResult("optional description");

在 MVC4及以上版本中,您可以使用内置的 HttpNotFound助手方法:

if (notWhatIExpected)
{
return HttpNotFound();
}

或者

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

直到我添加了下面的中间行,上面的例子都没有起作用:

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

请尝试下面的演示代码:

public ActionResult Test()


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

你也可以这样做:

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

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

在.NET Core 1.1中:

return new NotFoundObjectResult(null);