如何创建自定义错误报告中的 ASP.NET 页使用 Visual C#.NET

文章翻译 文章翻译
文章编号: 306355 - 查看本文应用于的产品
本文的发布号曾为 CHS306355
展开全部 | 关闭全部

本文内容

概要

本文介绍了如何使用 Visual C#.NET 代码来捕获和响应错误发生在 ASP.NET 中时。ASP.NET 已改进的错误处理选项从传统 Active Server Pages (ASP)。在 ASP.NET 中,您可以在您的应用程序中处理若干不同级别的错误。

在 ASP.NET 中的新增功能

ASP.NET 提供了几种进步如何处理和响应错误。在传统的 ASP 中,错误处理与"上错误 Resume Next"(或 JScript 中的try-catch块)。或者,如果您运行的 Microsoft Internet Information Services (IIS) 5.0,您使用的ASPError对象创建自定义错误报告页。但是,这些方法都有其局限性。

ASP.NET 提供多种级别的可以处理和响应运行 ASP.NET 应用程序时可能出现的错误。ASP.NET 提供了允许您捕获和响应错误发生时的三种主要方法: Page_ErrorApplication_Error和应用程序配置文件 (Web.config)。

本文介绍如何在 ASP.NET 应用程序中使用这些新功能。尽管这篇文章介绍如何提供自定义错误页,和一般的错误报告,因为它直接与 ASP.NET,本文未介绍其他的错误处理方法-捕获的 try-finally块和公共语言运行时 (CLR) 异常系统等。

如何使用 Page_Error 方法

Page_Error事件处理程序提供了一种方法,可以捕获在页级别上发生的错误。您可以只是显示错误信息 (如下面的代码示例不会),也可以记录事件或执行其他操作。

注意本示例仅用于演示目的的浏览器中显示详细的错误信息。想要向最终用户的应用程序时,显示的详细的信息,尤其是在 Internet 上运行该应用程序时要谨慎。更合适的操作将显示一条消息,向用户通知他们已发生错误,然后实际上日志特定错误详细信息记录在事件日志中。

本示例将引发空异常,这会强制在Page_Load事件处理程序中发生错误。请按照以下步骤创建初始网页将说明如何使用Page_Error事件处理程序。
  1. 请按照以下步骤添加新的文件命名为 PageEvent.aspxto 项目:
    1. 打开 Microsoft Visual Studio.NET。
    2. 在解决方案资源管理器中,用鼠标右键单击项目节点,指向添加,然后单击添加 Web 窗体
    3. 名称文本框中,键入 PageEvent.aspx然后单击打开
  2. 将下面的代码添加到 PageEvent.aspx 中:
    <script language=C# runat="server">
    void Page_Load(object sender, System.EventArgs e)
    {
    	throw(new ArgumentNullException());
    }
    
    public void Page_Error(object sender,EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"<b>Error Caught in Page_Error event</b><hr><br>" + 
    			"<br><b>Error in: </b>" + Request.Url.ToString() +
    			"<br><b>Error Message: </b>" + objErr.Message.ToString()+
    			"<br><b>Stack Trace:</b><br>" + 
    	                  objErr.StackTrace.ToString();
    	Response.Write(err.ToString());
    	Server.ClearError();
    }
    </script> 
    					

    注意在此代码示例中, AutoEventWireup属性未显式设置。如果您未显式执行 assigna 到AutoEventWireup属性的值,则使用默认值,则返回 true 。如果使用的 Visual Studio.NET 开发 yourapplications,Web 窗体模板代码显式将AutoEventWireup属性值设置为false。没有默认值 thatASP.NET 使用之间的重要区别,并且默认值,此属性对 Visual Studio.NET 模板 codeassigns。如果将AutoEventWireup属性值设置为false的事件处理程序中声明。ASPX 页,请执行 notfire。这可能会引起混乱,如果您不了解的关于 thisfunctionality。
  3. 文件菜单上,单击保存 PageEvent.aspx
  4. 用鼠标右键单击页面,然后单击在浏览器中运行页。请注意,不会引发错误,代码规范的 reportedaccording。
注意您可能会注意到该代码发出到Server.ClearError调用。这可以防止错误一直到Application_Error事件处理程序。

此外,还应注意Inherits特性的@ Page指令中。如果设置Inherits ,必须生成项目,先浏览到该页。如果不首先生成的项目,您会收到以下错误消息:
Project.PageEvent 不是有效的类型

如何使用 Application_Error 方法

类似于Page_Error事件处理程序,可用于Application_Error事件处理程序在您的应用程序中捕获发生的错误。由于该事件的应用程序范围内,可以记录的应用程序错误的信息或处理可能出现的其他应用程序级错误。

遵循该示例基于上述Page_Error代码示例,如果在Page_Load不捕获错误Page_Error事件处理程序中激发。Application_Error事件处理程序是在应用程序的 Global.asax 文件中指定的。为简单起见,此部分中的步骤创建的新页中要引发的异常、 捕获的 Global.asax 文件中, Application_Error事件处理程序中的错误和错误写入事件日志。下面的步骤演示如何使用Application_Error方法:
  1. 添加新文件与您的项目名称的 AppEvent.aspx。
  2. 将下面的代码添加到 AppEvent.aspx 中:
    <script language=C# runat="server">
    	void Page_Load(object sender, System.EventArgs e)
    	{
    		throw(new ArgumentNullException());
    	}
    </script>
    					

    注意"Page_Error"一节中讨论有关AutoEventWireup属性的信息亦适用于在此步骤中的代码示例。有关更多详细信息的"Page_Error"部分中的信息,请参阅。
  3. 文件菜单上,单击保存 AppEvent.aspx
  4. Application_Error事件处理程序添加到 Global.asax 文件,以捕获该 youthrow AppEvent.aspx 页的Page_Load事件处理程序中的错误。请注意,您必须 addanother 到 Global.asax 使用事件日志如何命名空间的using语句。

    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...
    } 
    					
  5. 将保存的 Global.asax 文件中。
  6. 在 Visual Studio.NET 中,在生成菜单上,单击生成
  7. 用鼠标右键单击页面,然后单击在浏览器中的视图。在这种情况下,页将为空白,但是,您应在事件日志中添加新条目的 noticethat。此示例创建条目,并在应用程序日志中,可以从事件查看器访问。Loggingthe 错误后您可能希望将用户重定向到其他更多的用户 friendlyerror 页中,或如果需要执行一些其他操作。

如何使用 Web.config 文件

如果您确实调用Server.ClearError或陷阱Page_ErrorApplication_Error事件处理程序中的错误,错误处理根据 Web.config 文件<customErrors>部分中的设置。在<customErrors>部分中,可以指定为默认错误页 (defaultRedirect) 的重定向页面,或指定到特定的页根据引发的 HTTP 错误代码。此方法可用于自定义该用户会收到错误消息。

如果发生都未捕获到应用程序中的上一个级别的错误,将显示此自定义的页面。这一节演示如何修改 Global.asax 文件,以便将永远不会调用Server.ClearError 。因此,错误处理在 Web.config 文件中作为最后一个点来捕获错误。 </customErrors></customErrors>
  1. 打开来自 previousexample 的 Global.asax 文件。
  2. 注释掉Server.ClearError行,确保 Web.configfile 中的错误曲面。
  3. 将您的更改保存到 Global.asax 中。您的代码应类似于下面的 nowappear:
    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...
    } 
    					
  4. 将以下代码添加到<customErrors>节要将用户重定向到自定义页:<b00> </b00> </customErrors>
    <customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
    </customErrors>
    						
    注意必须修改中defaultRedirect属性的文件路径,以便引用相关的 Web 服务器 andapplication 名。
  5. 因为在这一级别捕获的错误将手中默认错误页,您必须创建名为 ErrorStatus.htm.Keep,记住,要使用此方法来控制什么将显示给用户,以便作为错误页,此示例使用.htm 页错误页。将 followingcode 添加到 ErrorStatus.htm 中:
    <HTML>
    <HEAD>
    <TITLE></TITLE>
    <META NAME="GENERATOR" Content="Microsoft Visual Studio 7.0">
    </HEAD>
    <BODY>
         <b>Custom Error page!</b>
         <br>
         You have been redirected here from the <customErrors> section of the 
         Web.config file.
    </BODY>
    </HTML>
    					
  6. 若要测试代码,保存文件,生成项目,然后在浏览器中查看 AppEvent.aspx。请注意引发错误时,您将被重定向到 ErrorStatus.htm 页。
尽管可以引用默认错误页中的<customErrors>部分中的defaultRedirect属性的值,您还可以指定特定页重定向来根据引发的 HTTP 错误代码。此选项允许<error>子元素。例如:<b00> </b00> </error> </customErrors>
<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
	<error statusCode="404" redirect="filenotfound.htm" />
</customErrors>
				
注意defaultRedirect的<customErrors>部分中指定的页面是一个.htm 文件。我

请注意<customErrors>部分包含的模式属性设置为OnMode属性用于控制错误重定向发生的方式。例如,如果您开发的应用程序,您很可能希望看到实际的 ASP.NET 错误消息并不想被重定向到更用户友好的错误页。Mode属性包括以下设置: </customErrors></customErrors>
  • : 未经处理的异常将用户重定向到页上指定的defaultRedirect 。此模式主要用于生产。
  • 关闭: 用户收到异常信息和是不是 redirectedto defaultRedirect页。此模式主要用于开发。
  • RemoteOnly: 只访问本地计算机上的网站 (usinglocalhost) 的用户会收到异常信息。所有其他用户都已重定向至defaultRedirect页。此模式主要用于调试。

故障排除

在其默认安装 Microsoft Windows 2000 和 Windows XP 上,ASP.NET 辅助进程中运行的 Web 应用程序代码。此进程的标识默认为无特权的本地帐户 (名为 ASPNET 帐户。在 beta 版本的 ASP.NET 中,进程标识了系统,具有许多权限在计算机上强大管理帐户。

在 Windows Server 2003 (IIS 6) 在其默认安装中,ASP.NET 辅助进程中运行的 Web 应用程序代码。此进程的标识默认调用网络服务帐户是受限帐户。

有关此更改和它如何影响运行本文中的代码和其他代码可能需要额外访问权限的详细信息,请访问以下 Web 站点:
对于 Microsoft.NET Framework 的版本 1 安全更改
http://msdn2.microsoft.com/en-us/library/ms994923.aspx

参考

有关详细信息,请访问下面的 Microsoft 网站:
在.NET 中的异常管理

HttpServerUtility.ClearError 方法

MSDN.NET 开发中心

Microsoft.NET 主页

属性

文章编号: 306355 - 最后修改: 2013年10月29日 - 修订: 1.0
这篇文章中的信息适用于:
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2002 标准版
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2003 标准版
关键字:?
kbconfig kbhowtomaster kbweb kbmt KB306355 KbMtzh
机器翻译
重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。
点击这里察看该文章的英文版: 306355
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com