如果我的网站发生错误,请执行以下操作:
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
答案 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
答案 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>
<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>