protected void Application_Error( object sender, EventArgs e)
{
ILog log = LogManager .GetLogger( typeof ( MvcApplication ));
Exception objErr = Server.GetLastError().GetBaseException();
if (objErr.ToString().IndexOf( "favicon.ico" )==-1)
log.Error(objErr);
Server.ClearError();
}
本示例在应用程序统一记录错误日志, 可从事件查看器访问应用程序日志。
但在记录 错误 之后, “ Server.ClearError(); ” 在这种情况下该页就为 空白页面 。
应该直接跳转, 重定向到另一个更用户友好的 错误 页或者根据需要执行一些其他操作。
如何使用 Web.config 文件
如果您不调用 Server.ClearError 或者捕获 Page_Error 或 Application_Error 事件中的错误,则将根据 Web.config 文件的 <customErrors> 部分中的设置处理错误。在 <customErrors> 部分,可将重定向页指定为默认的错误页 (defaultRedirect) 或者根据引发的 HTTP 错误代码指定特定页。您可使用此方法自定义用户收到的错误信息。如果发生在应用程序以前的任一级别都未捕获到的错误,则显示这个自定义页。本节演示如何修改 Global.asax 文件,以便从不调用 Server.ClearError。因此,错误在作为捕获错误的最后一点的 Web.config 文件中进行处理。 1. 从上一个示例中打开 Global.asax 文件。
2. 将 Server.ClearError 行注释掉,以便确保错误出现在 Web.config 文件中。 3. 将所作更改保存到 Global.asax 中。代码看起来应类似如下形式: using System.Diagnostics;protected void Application_Error(object sender, EventArgs e)
{ Exception objErr = Server.GetLastError().GetBaseException(); string err = "Error Caught in Application_Error event/n" + "Error in:" + Request.Url.ToString() + "/nError Message:"+ objErr.Message.ToString() + "/nStack Trace:"+ objErr.StackTrace.ToString(); EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error); //Server.ClearError(); //additional actions... }
将以下代码添加到 <customErrors> 部分,以便将用户重定向到自定义页: <customErrors defaultRedirect="errorStatus.htm" mode="On"> </customErrors> 备注:必须修改 defaultRedirect 属性中的文件路径,以便它引用相关的 Web 服务器和应用程序名称。