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

Bud*_*dda 16 asp.net http-status-code-404

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

        Server.Transfer("/error.aspx");
Run Code Online (Sandbox Code Playgroud)

那个页面有代码:

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

    Response.StatusCode = 404;
}
Run Code Online (Sandbox Code Playgroud)

如果我在localhost上工作,那么返回页面的404状态,页面显示"正确的错误描述".

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

404 - 找不到文件或目录.

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

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

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

PS ASP.NET 4.0

adt*_*adt 15

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

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

</customErrors>
Run Code Online (Sandbox Code Playgroud)

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

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

  • 虽然这是完全正确的,但我建议,如果可能的话,不要将ASPX用于错误页面.如果错误与ASP引擎中的某些内容有关,则错误页面也可能无法加载. (6认同)
  • 不适用于 xxx.xom/wrongfolder,我收到“404 - 未找到文件或目录”。您正在查找的资源可能已被删除、名称已更改或暂时不可用。 (2认同)

Jag*_*Jag 11

哈!

试试这个:

Response.TrySkipIisCustomErrors = true;
Response.Status = "404 Not Found";
Response.StatusCode = 404;
Run Code Online (Sandbox Code Playgroud)

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

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

<system.webServer>
    <httpErrors existingResponse="PassThrough">
        // custom error page mappings
    </httpErrors>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

这里的关键是 existingResponse="PassThrough"

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

有关详细信息:http://msdn.microsoft.com/en-us/library/system.web.httpresponse.tryskipiiscustomerrors.aspx

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

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

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


小智 6

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


小智 5

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

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

<customErrors mode="On" redirectMode="ResponseRewrite">
  <error statusCode="404" redirect="404.htm" />
</customErrors>
Run Code Online (Sandbox Code Playgroud)

和:

<httpErrors errorMode="Custom">
  <remove statusCode="404"/>
  <error statusCode="404" path="404.htm" responseMode="File"/>
</httpErrors>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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