概要
本文介绍如何在 ASP.NET 中发生错误时使用 Visual C# .NET 代码捕获和响应错误。ASP.NET 改进了传统的 Microsoft Active Server Page (ASP) 中的错误处理选项。在 ASP.NET 中,您可在应用程序中处理若干不同级别的错误。
ASP.NET 中的新功能ASP.NET 在处理和响应错误的方式上进行了若干改进。在传统的 ASP 中,是用"On Error Resume Next"(或在 Jscript 中用 try-catch 块)处理错误的。或者,如果您运行的是 Microsoft Internet Information Services (IIS) 5.0,则使用 ASPError 对象创建自定义的错误报告页。然而,这些方法都有其局限性。ASP.NET 提供了在运行 ASP.NET 应用程序时可能出现的错误的若干处理和响应级别。ASP.NET 提供三种用于在出现错误时捕获和响应错误的主要方法: Page_Error 事件、 Application_Error 事件以及应用程序配置文件 (Web.config)。 本文演示如何在 ASP.NET 应用程序中使用这些新功能。尽管本文由于与 ASP.NET 直接相关而介绍了如何提供自定义错误页和一般错误报告,但是它并不介绍其他错误处理方法,如 try-catch-finally 块和公共语言运行库 (CLR) 异常系统。
如何使用 Page_Error 事件Page_Error 事件提供一种捕获在页级别出现的错误的方法。您可以只是显示错误信息(正如下面的示例代码所示),也可以记录事件或执行某个其他操作。备注:此示例在浏览器中显示详细的错误信息,提供此示例只是为了进行说明。向应用程序的最终用户显示详细信息(尤其是该应用程序在 Internet 上运行时)一定要小心。更适当的做法是向用户显示一条消息,告知已发生错误,然后将具体的错误详细信息记录在事件日志中。 本示例引发一个强迫错误发生在 Page_Load 事件中的空异常。按照以下步骤可创建将测试 Page_Error 事件的初始页。
此外,您还应记下 @ Page 指令中的 Inherits 属性。如果已经设置 Inherits,则必须首先生成项目,然后再浏览到该页。如果不首先生成项目,将看到下面的错误信息:
'Project.PageEvent' is not a valid type
如何使用 Application_Error 事件与 Page_Error 事件相类似,您可使用 Application_Error 事件捕获发生在应用程序中的错误。由于事件发生在整个应用程序范围内,因此您可记录应用程序的错误信息或处理其他可能发生的应用程序级别的错误。下面的示例基于前面的 Page_Error 事件代码示例,如果 Page_Load 事件中的错误未在 Page_Error 事件中捕获,将引发异常。 Application_Error 事件在应用程序的 Global.asax 文件中进行指定。为简单起见,本节中的步骤创建一个要在其中引发异常的新页,捕获 Global.asax 文件的 Application_Error 事件中的错误,并将该错误写入事件日志中。下面的步骤演示如何使用 Application_Error 事件:
如何使用 Web.config 文件如果您不调用 Server.ClearError 或者捕获 Page_Error 或 Application_Error 事件中的错误,则将根据 Web.config 文件的 <customErrors> 部分中的设置处理错误。在 <customErrors> 部分,可将重定向页指定为默认的错误页 ( defaultRedirect) 或者根据引发的 HTTP 错误代码指定特定页。您可使用此方法自定义用户收到的错误信息。如果发生在应用程序以前的任一级别都未捕获到的错误,则显示这个自定义页。本节演示如何修改 Global.asax 文件,以便从不调用 Server.ClearError。因此,错误在作为捕获错误的最后一点的 Web.config 文件中进行处理。
备注:在 <customErrors> 部分的 defaultRedirect 中指定的页是一个 .htm 文件。如果您打算在 .aspx 页中使用 GetLastError (正如 Page_Error 和 Application_Error 示例那样),则在进行重定向之前,必须将异常存储在会话变量或某个其他方法中。请注意,<customErrors> 部分包括设置为 On 的 mode 属性。mode 属性用于控制错误重定向发生的方式。例如,如果您正开发应用程序,则很可能希望查看实际的 ASP.NET 错误信息,并且不希望被重定向到更用户友好的错误页。mode 属性包括以下设置:
疑难解答在 Windows 2000 和 Windows XP 上的默认安装中,ASP.NET 在辅助进程中运行 Web 应用程序代码。此进程的标识默认为名为 ASPNET 的无特权本地帐户。在 ASP.NET 的 beta 版中,该进程的标识是 System,这是一个功能强大的管理员帐户,拥有许多计算机特权。有关此更改、它如何影响在本文中运行的代码以及可能需要其他访问权限的其他代码的更多信息,请参阅以下链接。 Microsoft .NET 框架 1.0 版的安全更改 (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetsec/html/V1securitychanges.asp) ASP.NET 中的进程和请求标识 (http://www.gotdotnet.com/team/upgrade/v1/aspnet_account_readme.doc)
参考
有关更多信息,请参阅以下 Microsoft Web 站点:
Exception Management in .NET(.NET 中的异常管理)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/exceptdotnet.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/exceptdotnet.asp) HttpServerUtility.ClearError Method(HttpServerUtility.ClearError 方法) http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebHttpServerUtilityClassClearErrorTopic.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebHttpServerUtilityClassClearErrorTopic.asp) MSDN .NET Development Center(MSDN .NET 开发中心) http://msdn.microsoft.com/library/default.asp?url=/nhp/Default.asp?contentid=28000519 (http://msdn.microsoft.com/library/default.asp?url=/nhp/Default.asp?contentid=28000519) Microsoft .NET 主页 http://www.microsoft.com/net/ (http://www.microsoft.com/net/) |
asp.net中创建自定义的错误处理页面
最新推荐文章于 2017-12-08 16:08:01 发布