在我的全局 asax 中,我总是检查它是什么类型的 http 错误...
然后转移到web.config中指定的正确错误页面
我喜欢处理常见的问题,404(丢失页面)和 500(服务器错误)
http 状态码的一些背景知识对于了解为什么处理它们很重要:
http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
我的 web.config 看起来像这样
<customErrors mode="On" defaultRedirect="~/error.aspx" >
<error statusCode="404" redirect="~/lost.aspx" />
<error statusCode="500" redirect="~/error.aspx" />
</customErrors>
我丢失的页面中有逻辑试图找到他们可能一直在寻找的页面的链接,以及一些其他格式。
我的错误页面有点不同,显示了一些错误信息,
所以我的处理方式不同。
根据您的网站是否有安全区域,您可能需要处理 401/403 吗?
protected void Application_Error(object sender, EventArgs e)
{
var context = Context;
var error = context.Server.GetLastError() as HttpException;
var statusCode = error.GetHttpCode().ToString();
// we can still use the web.config custom errors information to
// decide whether to redirect
var config = (CustomErrorsSection)WebConfigurationManager.GetSection("system.web/customErrors");
if (config.Mode == CustomErrorsMode.On ||
(config.Mode == CustomErrorsMode.RemoteOnly && context.Request.Url.Host != "localhost"))
{
// set the response status code
context.Response.StatusCode = error.GetHttpCode();
// Server.Transfer to correct ASPX file for error
if (config.Errors[statusCode] != null)
{
HttpContext.Current.Server.Transfer(config.Errors[statusCode].Redirect);
}
else
HttpContext.Current.Server.Transfer(config.DefaultRedirect);
}
}
我服务器转移的原因是为了让搜索引擎不会感到困惑,并让我的网站管理员日志有意义...如果您重定向您返回一个 http 状态 302,它告诉浏览器转到重定向到的页面.. . 然后下一页返回状态代码 200 ( ok )。
302 --> 200 ,甚至 302 --> 404 具有不同的含义,只是一个 404...
然后说我的 404 错误页面,我确保我设置了 http 错误的状态代码:
protected void Page_PreRender(object sender, EventArgs e)
{
Response.Status = "404 Lost";
Response.StatusCode = 404;
}
这篇文章对我很有帮助,我知道我想做什么,但我喜欢这段代码如何看待 web.config 设置...http://helephant.com/2009/02/improving-the-way-aspnet-handles-404-requests/
返回正确的状态码
默认情况下处理 404 的页面
错误页面不返回 404 状态
代码到浏览器。它显示
您提供给
用户,但没有任何额外的
将页面标记为
错误页面。
这称为软 404。软 404
页面不如那些
返回 404 状态码,因为
返回 404 状态码让
任何访问您的文件的东西
page 是错误页面而不是
您网站的真实页面。这主要是
对搜索引擎有用,因为那时
他们知道他们应该移除死者
索引中的页面,因此用户不会
从死链接进入您的网站
结果页面。
返回 404 状态代码的页面是
也可用于错误检测
因为它们会记录在你的
服务器日志,所以如果你有意外
404错误,很容易找到。
这是 404 错误的示例
在 Google 网站管理员工具中报告:
编辑
需要写吗
global.asax 中的 server.clearerror()?
有什么影响
- 不,您可以在错误页面上执行此操作,
不确定影响?如果你做一个
转移非,如果你重定向,那里
可能是另一种可能性
请求之间发生错误?
我不知道
为什么在 web.config 中我们应该写 error.aspx
两次状态码为 500,另一次为
默认重定向
- 我使用 2 是因为丢失的页面应该
显示/做与 a 不同的事情
服务器错误。错误页面显示
用户有一个错误,我们
无法从...中恢复过来
可能是我们的错。我留下一个
其他任何一个的默认重定向
错误代码也是如此。 403,401, 400 (
它们更罕见,但应该是
处理)
能否也告诉我error.aspx和lost.aspx的代码。
- 这取决于网站的类型
你有。你得到同样的错误
方式,但你用它做什么取决于
你。在我丢失的页面上我搜索
用户可能曾经拥有的一些内容
寻找。我记录的错误页面
错误等用户友好的哎呀
页面...您需要弄清楚
需要什么。