我有一个动作,它接受一个用于检索某些数据的字符串。如果此字符串导致没有返回数据(可能因为它已被删除),我想返回404并显示错误页面。
我目前只是使用返回一个特殊视图,该视图显示特定于此操作的友好错误消息,指出未找到该项目。这很好,但理想情况下会返回404状态代码,以便搜索引擎知道此内容不再存在,并可以将其从搜索结果中删除。
最好的方法是什么?
是否像设置Response.StatusCode = 404一样简单?
答案 0 :(得分:143)
在ASP.NET MVC 3及更高版本中,您可以从控制器返回HttpNotFoundResult。
return new HttpNotFoundResult("optional description");
答案 1 :(得分:101)
有多种方法可以做到,
throw new HttpException(404, "Some description");
答案 2 :(得分:56)
在MVC 4及更高版本中,您可以使用内置的HttpNotFound
辅助方法:
if (notWhatIExpected)
{
return HttpNotFound();
}
或
if (notWhatIExpected)
{
return HttpNotFound("I did not find message goes here");
}
答案 3 :(得分:24)
代码:
if (id == null)
{
throw new HttpException(404, "Your error message");//RedirectTo NoFoundPage
}
<强>的Web.config 强>
<customErrors mode="On">
<error statusCode="404" redirect="/Home/NotFound" />
</customErrors>
答案 4 :(得分:11)
我用过这个:
Response.StatusCode = 404;
return null;
答案 5 :(得分:6)
如果您使用的是.NET Core,则可以return NotFound()
答案 6 :(得分:5)
在NerdDinner中,例如。试试it
public ActionResult Details(int? id) {
if (id == null) {
return new FileNotFoundResult { Message = "No Dinner found due to invalid dinner id" };
}
...
}
答案 7 :(得分:4)
在我添加下面的中间行之前,以上所有示例都不适用于我:
public ActionResult FourOhFour()
{
Response.StatusCode = 404;
Response.TrySkipIisCustomErrors = true; // this line made it work
return View();
}
答案 8 :(得分:2)
我用:
Response.Status = "404 NotFound";
这对我有用: - )
答案 9 :(得分:1)
在.NET Core 1.1中:
return new NotFoundObjectResult(null);
答案 10 :(得分:0)
你也可以这样做:
if (response.Data.IsPresent == false)
{
return StatusCode(HttpStatusCode.NoContent);
}
答案 11 :(得分:-1)
请尝试以下演示代码:
public ActionResult Test()
{
return new HttpStatusCodeResult (404,"Not found");
}