20

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

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

该页面有代码:

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

    Response.StatusCode = 404;
}

如果我在本地主机上工作,那么连同为页面返回的 404 状态,页面显示“正确的错误描述”。

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

404 - 找不到文件或目录。

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

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

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

PS ASP.NET 4.0

4

7 回答 7

19
<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

于 2012-04-12T06:44:01.850 回答
15

啊哈!

尝试这个:

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 但您想显示与访问者相关的信息,我描述的方法效果最好。

例如,特价商品页面 (offers/some-offer) 可以查找商品 (some-offer),如果它不存在,则在引擎盖下返回 404 时显示替代或相关商品。据访问者所知,他们刚刚被告知该优惠不再可用,但他们仍在优惠部分,但我们还告诉机器人取消对 URL 的索引。如果只有一个通用 404 页面,这将更难做到。

于 2013-04-29T11:08:22.607 回答
6

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

于 2012-04-12T06:37:10.633 回答
4

要使用正确的 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 文件添加到您网站的根目录:

<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 中打开页面。

于 2014-02-11T13:38:23.307 回答
2

结合 Jag 和 adt 的答案,我仍然遇到了问题。当静态文件处理程序(而不是 ASP.NET)处理 404 时,我得到一个空白响应。(状态正确为 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>
于 2015-11-26T17:58:56.530 回答
1
<httpErrors errorMode="Custom">
     <remove statusCode="404"/>
     <error statusCode="404" path="ErrorPages/error404.htm" responseMode="Redirect"/>
  </httpErrors>

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

于 2018-09-19T08:58:02.507 回答
-1

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

1)创建一个 404.html 文件并添加您的内容

<html>
<头部>
  <meta charset="utf-8" />
  <title>404 - 未找到</title>
  <link href="bootstrap/css/bootstrap.css" rel="stylesheet" />
  <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" />
  <风格>
      身体 {
  颜色:#797979;
  背景:#eaeaea;
  字体系列:'Ruda',无衬线;
  填充:0px!重要;
  边距:0px!重要;
  字体大小:13px;
}
      .p404 图像 {
  边距顶部:120px;
}
      . 居中 {
  文本对齐:居中;
}
      .p404 h1 {
  字体粗细:900;
}
  </style>
</head>
<正文>
  <div class="容器">
      <div class="行">
          <div class="col-lg-6 col-lg-offset-3 p404 居中">
              <img src="assets/img/404.png" alt="">
              <h1>不要惊慌!!</h1>
              <h3>您要查找的页面不存在。</h3>
              <br>
              <div class="行">
                  <div class="col-md-8 col-md-offset-2">

                      <a class="btn btn-success" href="Default.aspx">返回首页</a>
                  </div>
              </div>
           
          </div>
      </div>
  </div>
</正文>
</html>
  1. 在网络配置中添加此代码

   <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>
 
于 2020-06-30T04:58:12.730 回答