技术开发 频道

asp.net错误处理总则


【IT168技术文档】

  1.asp.net错误处理,主要用来处理“用户末手动捕获的异常”;
  2.关于在c#里“异常手动捕获”和“系统自动捕获送给asp.net处理”的关系,有以下原则:
  如果很程序员能预料的异常则在c#手动捕获,当然那些不能预料到的异常就交由系统自动捕获去。
  3.是否向用户显示友好错误信息(程序员自定义错误页面),完全由web.config控制。
  4.末捕获的异常,请在Applicaton_Error事件中进行处理,Server.GetLastError(),在这里可以把日志处理等。

  ASP.NET具有一个很好的新功能:它对运行时间错误的处理和跟踪提供了丰富支持。特别是,它为管理人员提供了一种很简单的方法,可以保证那些令人恐惧的“ASP 43433ax”十六进制形式的错误永远也不会被显示到客户面前。相反,它允许显示一个较为定制化的信息,比如“对不起,这个站点不可用”。 ASP.NET还提供了一种强大的方法,使开发人员可以对他们的代码进行装备,向管理人员提供发生在工作站点问题的额外信息与通知。本文详细介绍了这两种技术,同时在结尾包括了一个样本代码,你可以直接使用它试验一下。

  确保不会泄露安全信息

  ASP.NET 同以前的ASP一样,当服务器上发生了一个运行时间或编译时间错误时,就会生成一个html 错误页面。但是与ASP不同,ASP.NET格外关注的是:要确保在默认状态下,不会因为这个错误的发生而泄露“安全”信息。尤其是如果你从一个远程机器上点击服务器的话。“out of the box”型的错误处理设置将不会导致显示远程机器的编译器信息、泄露配置信息、文件名、堆栈记录、源代码或线性数据。相反,远程用户只会看到一个如“发生了应用程序错误”的普通信息。要想查看错误细节,用户必须要:1)从本地服务器再次点击页面,或者是 2)在机器或应用程序的config.web文件中修改配置的设置来允许远程访问:
<configuration> <customerrors mode="off" /> </configuration>
  我们希望通过将默认状态设置成我们不得不“安全”的样子,从而能够最终帮助保护应用程序的完整性和安全性。并且由此纠正许多ASP开发人员—特别是ASP管理人员都在反映的一个共同的抱怨/担心)。
 
  使用定制错误页面 
  
   虽然我们发送给用户的公用错误信息是安全的,就是说它不会威胁到应用程序的秘密,但是这样的信息并不好看。也许你希望用户永远也看不到这样的信息。相反,当处理请求的过程中,如果发生了一个为处理的错误,你希望能够显示自己的“定制错误页面”,显示出自己的品牌以及特定的错误信息。

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

  举例说明,以下这个配置信息说明在发生了任何未能预定处理错误的情况下,浏览器都应该被重定向到“ErrorPage.aspx”页面:
<configuration> <customerrors mode="remoteonly" defaultredirect="ErrorPage.aspx" /> </configuration>
  <customerrors>标记中的“defaultredirect”属性定义了在发生错误的情况下,用户将被重定向到的“默认”页面。或者,也可以根据响应的http代码状态,重定向到其它的页面来覆盖这个默认值。例如:重定向到一个特殊的“未找到文件”错误页面、“非法访问”错误页面、“服务器冲突”错误页面等等。

  举例说明,以下的配置信息覆盖3个特定的http 状态代码,所有其它错误都返回到一个默认页面:
<customerrors defaultredirect="http://anotherhost/error.aspx" mode="remoteonly"> <error statuscode="500" redirect="http:/anotherhost/pages/callsupport.html" /> <error statuscode="404" redirect="http:/anotherhost/pages/adminmessage.html" /> <error statuscode="403" redirect="http:/anotherhost/pages/noaccess.html" /> </customerrors>
  在定制错误页面上有一件事我们已经遇到过,那就是虽然它们对于已经完成的情况非常有用,然而在开发过程中却非常难以对付。因为你预想到在开发过程中会有bug,并且当你发现的时候,真的希望看到实际的错误信息跟踪。为了解决这个问题,<customerrors>标记支持一个有3个值的“mode”属性:

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

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

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