虽然我们发送给用户的公用错误信息是安全的,就是说它不会威胁到应用程序的秘密,但是这样的信息并不好看。也许你希望用户永远也看不到这样的信息。相反,当处理请求的过程中,如果发生了一个为处理的错误,你希望能够显示自己的“定制错误页面”,显示出自己的品牌以及特定的错误信息。

向ASP.NET 应用程序中增加定制错误信息非常容易。首先,编写自己的 web页面,它可以是任何类型的文件:.htm,.aspx,.asp,等等。然后在应用程序的config.web文件中修改配置信息,让它指向这个文件。

举例说明,以下这个配置信息说明在发生了任何未能预定处理错误的情况下,浏览器都应该被重定向到“ErrorPage.aspx”页面:

<configuration>
            <customerrors mode="remoteonly" defaultredirect="ErrorPage.aspx" /></configuration>
<customerrors>

标记中的“defaultredirect”属性定义了在发生错误的情况下,用户将被重定向到的“默认”页面。或者,也可以根据响应的http代码状态,重定向到其它的页面来覆盖这个默认值。例如:重定向到一个特殊的“未找到文件”错误页面、“非法访问”错误页面、“服务器冲突”错误页面等等。

举例说明,以下的配置信息覆盖3个特定的http 状态代码,所有其它错误都返回到一个默认页面:

<customErrors mode="RemoteOnly" defaultRedirect="404/404.html">
   <error statusCode="500" redirect="404/404.html"></error>
   <error statusCode="404" redirect="404/404.html"></error>
   <error statusCode="403" redirect="404/404.html"></error>
  </customErrors>


在定制错误页面上有一件事我们已经遇到过,那就是虽然它们对于已经完成的情况非常有用,然而在开发过程中却非常难以对付。因为你预想到在开发过程中会有bug,并且当你发现的时候,真的希望看到实际的错误信息跟踪。为了解决这个问题,<customerrors>标记支持一个有3个值的“mode”属性:

“on”:意思是总是发出定制错误页面;

“off”:意思是从不发出定制错误页面(你总是看到原始的错误信息);

“remoteonly”:意思是只有当远程浏览器点击站点时才发出定制错误页面(而在实际机器上点击站点的开发人员看到的是详细的错误信息)。

 

二,在Global.asax文件中添加应用出错代码,写入系统日志文件
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();
     //将捕获的错误写入windows的应用程序日志中,可从事件查看器中访问应用程序日志。
     System.Diagnostics.EventLog.WriteEntry("Test2", err, System.Diagnostics.EventLogEntryType.Error);
     Server.ClearError();  //清除异常,其他地方不再捕获此异常。
    }

 

 posted on 2010-09-13 13:41  纳米程序员  阅读(6477)  评论(1编辑  收藏  举报