ASP.NET MVC中的404页
我正在构建我的第一个ASP.NETMVC网站,我正在试图找出如何实现404页面ASP.NET MVC中的404页,asp.net,asp.net-mvc,iis,http-status-code-404,Asp.net,Asp.net Mvc,Iis,Http Status Code 404,我正在构建我的第一个ASP.NETMVC网站,我正在试图找出如何实现404页面 我应该创建一个名为“404Controller”的控制器吗?如果是的话,我该如何向IIS注册这个控制器,以便它将404重定向到该页面?另外,在某些其他控制器代码找不到某些内容(例如,在数据库中)的情况下,如何将请求重定向到404页面 对于您要做的事情没有单一的答案,最简单也是我喜欢的是使用HttpException类,例如 public ActionResult ProductDetails(int id) {
我应该创建一个名为“404Controller”的控制器吗?如果是的话,我该如何向IIS注册这个控制器,以便它将404重定向到该页面?另外,在某些其他控制器代码找不到某些内容(例如,在数据库中)的情况下,如何将请求重定向到404页面 对于您要做的事情没有单一的答案,最简单也是我喜欢的是使用
HttpException
类,例如
public ActionResult ProductDetails(int id) {
Product p = this.repository.GetProductById(id);
if (p == null) {
throw new HttpException(404, "Not Found");
}
return View(p);
}
在web.config上,您可以配置customError页面,例如
<customErrors mode="RemoteOnly" redirectMode="ResponseRewrite">
<error statusCode="404" redirect="Views/Errors/Http404.aspx" />
</customErrors>
NotFoundController
并将路径映射到它,比如说/404
,然后将URL放在web.config
文件中(请参见@R0MANARMY)答案抛出新的HttpException(404,“未找到”)
,或者如果不想抛出异常(代价高昂),您只需通过Response.StatusCode
属性将状态代码设置为404,然后从操作方法返回视图(“My404Template”)
我最喜欢的选项是返回一个名为404的视图
if (article == null)
return View("404");
这将允许您选择在共享文件夹中具有通用404视图,并在文章控制器中具有特定的404视图
此外,这里没有重定向是一个很大的优点。包括一个HttpNotFoundResult
类,Controller
也有一个HttpNotFound
静态方法
public ActionResult Index(int id) {
var myThing = Loader.GetById(id);
if (myThing == null) {
return HttpNotFound("Thing Not Found");
}
return View(myThing);
}
将
Application\u EndRequest
方法添加到您的mvcapapplication
per。要在代码中导致“未找到”错误,请抛出新的HttpException(404,“未找到”),以防它会帮助其他人
与Fitzchak的回答类似,我在共享文件夹中有一个自定义的404视图。为了返回正确的状态代码,我只是将其添加到该视图的顶部
@{
ViewBag.Title = "Page Not Found";
Response.StatusCode = 404;
}
在我的本地主机上工作得很好,但在我的生产服务器上,我不得不将这一行添加到web配置中,因为IIS正在捕获404状态并显示自己的404页面
<system.webServer>
...
<httpErrors errorMode="Detailed" />
</system.webServer>
...
@chakrit:asp.net mvc在没有NotFoundController的情况下不会给您提供404吗?或者,你的意思是,如果你想重定向到静态HTML404页面以外的其他页面?简单且可自定义,我喜欢。不要忘记未处理的事件,如错误的URL。尝试以下解决方案:如果是,您还必须更改状态代码。但你明白了。IIS处理错误的方式让我恶心。不要因为我键入的URL不正确而重定向我。@David Murdoch:WithredirectMode=“ResponseRewrite”
没有重定向。我现在感觉好多了。:-)@UptheScreek如果错误页面不依赖于MVC,它就可以工作。