Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET MVC中的404页_Asp.net_Asp.net Mvc_Iis_Http Status Code 404 - Fatal编程技术网

ASP.NET MVC中的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) {

我正在构建我的第一个ASP.NETMVC网站,我正在试图找出如何实现404页面


我应该创建一个名为“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:With
    redirectMode=“ResponseRewrite”
    没有重定向。我现在感觉好多了。:-)@UptheScreek如果错误页面不依赖于MVC,它就可以工作。