如何返回'自己'404自定义页面?

时间:2012-04-12 02:57:44

标签: asp.net http-status-code-404

如果我的网站发生错误,请执行以下操作:

        Server.Transfer("/error.aspx");

并且该页面包含代码:

protected void Page_Load(object sender, EventArgs e)
{
    ...

    Response.StatusCode = 404;
}

如果我在本地主机上工作,那么同时返回页面的404状态,页面会显示正确的错误说明'。

我将相同的代码发布到互联网后,所有有错误的网页仍会显示404状态代码,但不会显示内容。相反,他们有标准的404错误消息:

  

404 - 找不到文件或目录。

如果行" Response.StatusCode = 404"注释掉然后提供了正确的页面,但它有200个状态代码。

问题:如何返回用户友好的错误页面,同时有404错误状态代码?

欢迎任何想法!非常感谢提前!

P.S。 ASP.NET 4.0

7 个答案:

答案 0 :(得分:15)

<customErrors mode="On" defaultRedirect="~/Error/GenericErrorPage.aspx">

     <error statusCode="404" redirect="~/Error/404.aspx" />

</customErrors>

http://msdn.microsoft.com/en-us/library/h0hfz6fc(v=vs.71).aspx

http://msdn.microsoft.com/en-us/library/aa479319.aspx

答案 1 :(得分:11)

哈哈!

试试这个:

Response.TrySkipIisCustomErrors = true;
Response.Status = "404 Not Found";
Response.StatusCode = 404;

我在设置状态代码之前添加Response.TrySkipIisCustomErrors=true时发现,我会看到正常的页面副本并返回404。如果没有此行,则会显示标准的IIS 404页面。

或者,这可以在web.config中设置,如下所示:

<system.webServer>
    <httpErrors existingResponse="PassThrough">
        // custom error page mappings
    </httpErrors>
</system.webServer>

这里的关键是existingResponse="PassThrough"

这已添加到IIS7,因此在以集成管道模式运行的站点上是必需的。

了解更多信息:http://msdn.microsoft.com/en-us/library/system.web.httpresponse.tryskipiiscustomerrors.aspx

<强>更新 更新澄清/更多信息,因为人们仍然觉得这很有用。 值得注意的是,如果您需要一个简单的通用404页面,请使用web.config方法(最好使其成为纯HTML页面)。

如果你有一个动态或CMS驱动的网站,我描述的方法最有效,任何给定的网页都可能返回404,但你想显示你的访问者相关信息。

例如,特殊优惠页面(优惠/优惠)可以查询优惠(部分优惠),如果不存在则显示替代或相关优惠,同时返回引擎盖下的404。据访问者了解,他们刚刚被告知要约已不再可用,但他们仍然在优惠部分,但我们也告诉机器人取消索引网址。 如果只有一个通用的404页面,那将会更加困难。

答案 2 :(得分:6)

您可以通过配置web.config文件来实现此目的。请查看下面的链接,该文章在页面底部解释了如何针对不同的HTTP错误状态显示不同的自定义错误页面。

答案 3 :(得分:3)

要使用正确的404 状态代码显示自己的网页,您可以使用以下代码:

1)在您的web.config中添加以下内容:

<customErrors mode="On" redirectMode="ResponseRewrite">
  <error statusCode="404" redirect="404.htm" />
</customErrors>

<httpErrors errorMode="Custom">
  <remove statusCode="404"/>
  <error statusCode="404" path="404.htm" responseMode="File"/>
</httpErrors>

2)将404.htm文件添加到您网站的 root

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>404 - Not Found</title>
    <meta http-equiv="refresh" content="5;url=/404-PAGE" />
  </head>
  <body>
       CONTENT
  </body>
</html>

您可以将内容添加到此文件的正文并删除META刷新,也可以只使用META刷新在CMS中打开页面。

答案 4 :(得分:2)

结合Jag和adt的答案,我仍有问题。当404由静态文件处理程序(而不是ASP.NET)处理时,我得到一个空白的响应。 (状态正确404。)

要解决此问题,我必须将errorMode="Custom"添加到<httpErrors>元素。如果您的错误页面使用ASP.NET,则需要包含responseMode="ExecuteURL"

<system.web>
    <customErrors mode="On" defaultRedirect="~/Error.aspx" redirectMode="ResponseRewrite" />
</system.web>

<system.webServer>
    <httpErrors errorMode="Custom">
        <remove statusCode="404" />
        <error statusCode="404" path="/Error.aspx" responseMode="ExecuteURL" />
    </httpErrors>
</system.webServer>

答案 5 :(得分:0)

<httpErrors errorMode="Custom">
     <remove statusCode="404"/>
     <error statusCode="404" path="ErrorPages/error404.htm" responseMode="Redirect"/>
  </httpErrors>

如果我在path属性中不使用波浪号(~),这对我有用

答案 6 :(得分:-1)

要在asp.net C#中创建和访问404页面,请按照以下步骤操作:

1)创建404.html文件并添加内容

<html>
<head>
  <meta charset="utf-8" />
  <title>404 - Not Found</title>
  <link href="bootstrap/css/bootstrap.css" rel="stylesheet" />
  <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" />
  <style>
      body {
  color: #797979;
  background: #eaeaea;
  font-family: 'Ruda', sans-serif;
  padding: 0px !important;
  margin: 0px !important;
  font-size: 13px;
}
      .p404 img {
  margin-top: 120px;
}
      .centered {
  text-align: center;
}
      .p404 h1 {
  font-weight: 900;
}
  </style>
</head>
<body>
  <div class="container">
      <div class="row">
          <div class="col-lg-6 col-lg-offset-3 p404 centered">
              <img src="assets/img/404.png" alt="">
              <h1>DON'T PANIC!!</h1>
              <h3>The page you are looking for doesn't exist.</h3>
              <br>
              <div class="row">
                  <div class="col-md-8 col-md-offset-2">

                      <a class="btn btn-success" href="Default.aspx">Back To Home</a>
                  </div>
              </div>
           
          </div>
      </div>
  </div>
</body>
</html>
  1. 在Web配置中添加此代码

   <system.web>
    <customErrors mode="On" redirectMode="ResponseRewrite">
      <error statusCode="404" redirect="404.html" />
    </customErrors>   
  </system.web>
   <system.webServer>
    <httpErrors errorMode="Custom">
      <remove statusCode="404"/>
      <error statusCode="404" path="404.html" responseMode="File"/>
    </httpErrors>
  </system.webServer>