如何获得MVC行动返回404
我有一个采取用于检索一些数据的string的操作。 如果这个string导致没有数据被返回(可能是因为它已被删除),我想返回一个404并显示一个错误页面。
我目前只是使用返回一个特殊的视图,显示一个友好的错误消息,特定于此操作,说该项目未find。 这工作正常,但理想情况下,将返回一个404状态代码,以便search引擎知道这个内容不再存在,并可以从search结果中删除它。
什么是最好的方式去做这件事?
是不是像设置Response.StatusCode = 404一样简单?
有多种方式可以做到这一点,
- 你是正确的,可以用你指定的方式分配它的公共aspx代码
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"); }