如何移除冗长的 ASP.Net 错误页面






2.65/5 (5投票s)
移除冗长的 ASP.Net 错误页面
引言
在开始 Web 开发时,所有程序员和社区首先都会说,不应该向最终用户客户端显示详细的错误信息。但 ASP.NET 错误页面却过于详细,有时甚至会显示源代码内容或表名,尤其是在程序员没有使用 N 层架构风格的情况下。经过对 ASP.NET 的深入研究,我发现了一种隐藏错误信息,防止黑客或任何恶意人员访问的方法,具体步骤如下:
步骤
1- 添加特殊的 web.config 标签
2- 构建错误处理类。
3- 创建自定义错误页面
4- 将错误记录到系统事件日志。
实际应用
Step one
在 web.config 文件中,在 system.web 部分添加以下标签:
<customErrors mode=”On” defaultRedirect=”~/CustomError.aspx” />
第二步
创建错误处理类
public class M3MErrorHandler : IHttpModule
{
public void Init(HttpApplication app)
{
app.Error += new EventHandler(app_Error);
}
protected void app_Error(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)app;
HttpContext context = app.Context;
Exception error = context.Server.GetLastError().GetBaseException();
context.Response.Clear();
CompilationSection compilationConfig = (CompilationSection)WebConfigurationManager.GetWebApplicationSection(“system.web/compilation”);
if (compilationConfig.Debug) context.Server.Transfer(“~/Debug.aspx”);
else
context.Server.Transfer(“~/Error.aspx”);
}
public void Dispose()
{ }
}
}
}
第三步
创建两个页面,一个用于显示调试信息,另一个用于公共使用,显示错误提示。
第四步
在 Gloabls.asax 中
使用系统日志在 Application_Error 事件中将错误记录到事件日志中
如下所示:
Exception x = Server.GetLastError().GetBaseException();
EventLog.WriteEntry(LOG_SOURCE, x.ToString(), EventLogEntryType.Error);
就这样了