知识大全 ASP.NET自定义错误页面

Posted 事件

篇首语:满堂花醉三千客,一剑霜寒十四州。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET自定义错误页面相关的知识,希望对你有一定的参考价值。

ASP.NET自定义错误页面  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  ASP NET 提供三种用于在出现错误时捕获和响应错误的主要方法 Page_Error 事件 Application_Error 事件以及应用程序配置文件 (nfig)

  如果您不调用 Server ClearError 或者捕获 Page_Error 或 Application_Error 事件中的错误 则将根据 nfig 文件的 <customErrors> 部分中的设置处理错误 在 <customErrors> 部分 可将重定向页指定为默认的错误页 (defaultRedirect) 或者根据引发的 HTTP 错误代码指定特定页 您可使用此方法自定义用户收到的错误信息

  尽管您可在 <customErrors> 部分中 defaultRedirect 属性的值中引用默认的错误页 但是您还可根据引发的 HTTP 错误代码指定要重定向到的特定页 <error> 子元素允许使用此选项<customErrors mode= On defaultRedirect= ApplicationErroy aspx > <error statusCode= redirect= /> <error statusCode= redirect= /> <error statusCode= redirect= /> </customErrors>

  自定义错误处理页面方法一 添加nfig < system web>< /system web>中添加< customErrors mode= On defaultRedirect= ApplicationErroy aspx >< /customErrors>节点 添加错误处理页面 ApplicationErroy aspx调用下面的方法 private void DealErroy()

   HttpException erroy = new HttpException() string strCode = erroy ErrorCode ToString() string strMsg = erroy Message erroy HelpLink = sss Response Write( ErrorCode + strCode + < br> ) Response Write( Message + strMsg + < br> ) Response Write( HelpLink + erroy HelpLink + < br> ) Response Write( Source + erroy Source + < br> ) Response Write( TargetSite + erroy TargetSite + < br> ) Response Write( InnerException + erroy InnerException + < br> ) Response Write( StackTrace + erroy StackTrace + < br> ) Response Write( GetHtmlErrorMessage + erroy GetHtmlErrorMessage() + < br> ) Response Write( erroy GetHttpCode() ToString() + erroy GetHttpCode() ToString() + < br> ) Response Write( erroy Data ToString() + erroy Data ToString() + < br> )

  private void DealErroy()

   HttpException erroy = new HttpException() string strCode = erroy ErrorCode ToString() string strMsg = erroy Message erroy HelpLink = sss Response Write( ErrorCode + strCode + < br> ) Response Write( Message + strMsg + < br> ) Response Write( HelpLink + erroy HelpLink + < br> ) Response Write( Source + erroy Source + < br> ) Response Write( TargetSite + erroy TargetSite + < br> ) Response Write( InnerException + erroy InnerException + < br> ) Response Write( StackTrace + erroy StackTrace + < br> ) Response Write( GetHtmlErrorMessage + erroy GetHtmlErrorMessage() + < br> ) Response Write( erroy GetHttpCode() ToString() + erroy GetHttpCode() ToString() + < br> ) Response Write( erroy Data ToString() + erroy Data ToString() + < br> )

  这种方法不能完整地显示错误信息

  自定义错误处理页面方法二 添加nfig < system web>< /system web>中添加< customErrors mode= On defaultRedirect= ApplicationErroy aspx >< /customErrors>节点 添加Global asax文件 找到Application_Error事件 加入以下代码://这是添加了一个全局应用程序类 在Application_Error事件中处理错误页面 和nfig没有关系 即使没有nfig 也是可以定位到错误页面void Application_Error(object sender EventArgs e)

   //在出现未处理的错误时运行的代码Exception erroy = Server GetLastError() string err = 出错页面是 + Request Url ToString() + </br> err += 异常信息 + erroy Message + </br> err += Source + erroy Source + </br> err += StackTrace + erroy StackTrace + </br> //清除前一个异常Server ClearError()

  //此处理用Session[ ProError ]出错 所以用 Application[ ProError ] Application[ erroy ] = err //此处不是page中 不能用Response Redirect( ……/frmSysError aspx ) System Web HttpContext Current Response Redirect(HttpContext Current Request ApplicationPath + /ApplicationErroy aspx )

   添加错误处理页面 ApplicationErroy aspx 加入以下代码 protected void Page_Load(object sender EventArgs e)

   //显示程序中的错误码if (!IsPostBack)

   //显示程序中的错误码if (Application[ erroy ] != null)

   Response Write(Application[ erroy ] ToString()) 这种方法能完整地显示错误信息 最好的办法还是两种方法一起用最好!

  另 nfig中也可以把<customErrors mode= On defaultRedirect= ApplicationErroy aspx > <error statusCode= redirect= /> <error statusCode= redirect= /> <error statusCode= redirect= /> </customErrors>

  添加进去错误代码含义       Forbidden       Not Found       Internal Server Error 错误代码含义大全详解   do showone uid type blol

  方法三Page_Error事件Page_Error 事件提供一种捕获在页级别出现的错误的方法 您可以只是显示错误信息(正如下面的示例代码所示) 也可以记录事件或执行某个其他操作

  备注 此示例在浏览器中显示详细的错误信息 提供此示例只是为了进行说明 向应用程序的最终用户显示详细信息(尤其是该应用程序在 Internet 上运行时)一定要小心 更适当的做法是向用户显示一条消息 告知已发生错误 然后将具体的错误详细信息记录在事件日志中

  本示例引发一个强迫错误发生在 Page_Load 事件中的空异常 按照以下步骤可创建将测试 Page_Error 事件的初始页 按照以下步骤将名为 PageEvent aspx 的新文件添加到项目中 a 打开 Microsoft Visual Studio NET b 在 解决方案资源管理器 中 右键单击该项目节点 指向添加 然后单击添加 Web 窗体

  c 在名称文本框中 键入 PageEvent aspx 然后单击打开

  将以下代码添加到 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>从文件菜单中 单击保存 PageEvent aspx 右键单击该页 然后单击在浏览器中查看以运行该页 请注意 将按照代码规范引发和报告错误

  备注 您可能注意到代码发出对 Server ClearError 的调用 这将防止错误继续到要被处理的 Application_Error 事件中

  此外 您还应记下 @ Page 指令中的 Inherits 属性 如果已经设置 Inherits 则必须首先生成项目 然后再浏览到该页 如果不首先生成项目 将看到下面的错误信息 Project PageEvent is not a valid type(转)

  ASP NET 在处理和响应错误的方式上进行了若干改进 在传统的 ASP 中 是用 On Error Resume Next (或在 Jscript 中用 try catch 块)处理错误的 或者 如果您运行的是 Microsoft Internet Information Services (IIS) 则使用 ASPError 对象创建自定义的错误报告页 然而 这些方法都有其局限性

  ASP NET 提供了在运行 ASP NET 应用程序时可能出现的错误的若干处理和响应级别 ASP NET 提供三种用于在出现错误时捕获和响应错误的主要方法 Page_Error 事件 Application_Error 事件以及应用程序配置文件 (nfig)

  本文演示如何在 ASP NET 应用程序中使用这些新功能 尽管本文由于与 ASP NET 直接相关而介绍了如何提供自定义错误页和一般错误报告 但是它并不介绍其他错误处理方法 如 try catch finally 块和公共语言运行库 (CLR) 异常系统

  如何使用 Page_Error 事件Page_Error 事件提供一种捕获在页级别出现的错误的方法 您可以只是显示错误信息(正如下面的示例代码所示) 也可以记录事件或执行某个其他操作

  备注 此示例在浏览器中显示详细的错误信息 提供此示例只是为了进行说明 向应用程序的最终用户显示详细信息(尤其是该应用程序在 Internet 上运行时)一定要小心 更适当的做法是向用户显示一条消息 告知已发生错误 然后将具体的错误详细信息记录在事件日志中

  本示例引发一个强迫错误发生在 Page_Load 事件中的空异常 按照以下步骤可创建将测试 Page_Error 事件的初始页 按照以下步骤将名为 PageEvent aspx 的新文件添加到项目中 a 打开 Microsoft Visual Studio NET b 在 解决方案资源管理器 中 右键单击该项目节点 指向添加 然后单击添加 Web 窗体

  c 在名称文本框中 键入 PageEvent aspx 然后单击打开

   将以下代码添加到 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> 从文件菜单中 单击保存 PageEvent aspx 右键单击该页 然后单击在浏览器中查看以运行该页 请注意 将按照代码规范引发和报告错误

  备注 您可能注意到代码发出对 Server ClearError 的调用 这将防止错误继续到要被处理的 Application_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 事件 将名为 AppEvent aspx 的新文件添加到项目中 将以下代码添加到 AppEvent aspx 中 <script language=C# runat= server > void Page_Load(object sender System EventArgs e)

   throw(new ArgumentNullException()) </script> 从文件菜单中 单击保存 AppEvent aspx 将 Application_Error 事件添加到 Global asax 文件中以捕获在 AppEvent aspx 页的 Page_Load 事件中引发的错误 注意 您必须为 System Diagnostics 名称空间将另一条 using 语句添加到 Global asax 才能使用事件日志

  将以下代码添加到 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……

   保存 Global asax 文件

   在 Visual Studio NET 中 在生成菜单上 单击生成

   右键单击该页 然后单击在浏览器中查看 在这种情况下该页将为空白 但是您应该注意到在事件日志中已添加了一个新项 本示例在应用程序日志中生成一个项 可从事件查看器访问应用程序日志 在记录错误之后 您可能希望将用户重定向到另一个更用户友好的错误页或者根据需要执行一些其他操作

  如何使用 nfig 文件如果您不调用 Server ClearError 或者捕获 Page_Error 或 Application_Error 事件中的错误 则将根据 nfig 文件的 <customErrors> 部分中的设置处理错误 在 <customErrors> 部分 可将重定向页指定为默认的错误页 (defaultRedirect) 或者根据引发的 HTTP 错误代码指定特定页 您可使用此方法自定义用户收到的错误信息

  如果发生在应用程序以前的任一级别都未捕获到的错误 则显示这个自定义页 本节演示如何修改 Global asax 文件 以便从不调用 Server ClearError 因此 错误在作为捕获错误的最后一点的 nfig 文件中进行处理 从上一个示例中打开 Global asax 文件

   将 Server ClearError 行注释掉 以便确保错误出现在 nfig 文件中

   将所作更改保存到 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= mode= On > </customErrors>备注 必须修改 defaultRedirect 属性中的文件路径 以便它引用相关的 Web 服务器和应用程序名称

   因为在此级别捕获的错误会发送到默认的错误页 所以 必须创建一个名为 的错误页 请记住 您要使用此方法来控制向用户呈现的内容 因此本示例使用 页作为错误页 将以下代码添加到 中 <HTML> <HEAD> <TITLE></TITLE> <META NAME= GENERATOR Content= Microsoft Visual Studio > </HEAD> <BODY> <b>Custom Error page!</b> <br> You have been redirected here from the <customErrors> section of the nfig file </BODY> </HTML> 若要测试该代码 请保存这些文件 生成项目 然后在浏览器中查看 AppEvent aspx 请注意 在引发错误时 您将被重定向到 页

  尽管您可在 <customErrors> 部分中 defaultRedirect 属性的值中引用默认的错误页 但是您还可根据引发的 HTTP 错误代码指定要重定向到的特定页 <error> 子元素允许使用此选项 例如 <customErrors defaultRedirect= mode= On > <error statusCode= redirect= /> </customErrors>备 注 在 <customErrors> 部分的 defaultRedirect 中指定的页是一个 文件 如果您打算在 aspx 页中使用 GetLastError (正如 Page_Error 和 Application_Error 示例那样) 则在进行重定向之前 必须将异常存储在会话变量或某个其他方法中

cha138/Article/program/net/201311/11901

相关参考

知识大全 ASP.net MVC自定义错误处理页面

ASP.netMVC自定义错误处理页面  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在ASPN

知识大全 ASP.NET页面错误处理

ASP.NET页面错误处理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &

知识大全 ASP.NET定制简单的错误处理页面

ASP.NET定制简单的错误处理页面  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 Asp.NET自定义DataGrid控件

Asp.NET自定义DataGrid控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一&nb

知识大全 Asp.net 2.0 自定义控件开发

Asp.net2.0自定义控件开发  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  (一)概述  

知识大全 ASP.NET自定义输出缓存提供程序

ASP.NET自定义输出缓存提供程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们知道自从

知识大全 ASP.NET 中的自定义脚本回调

ASP.NET中的自定义脚本回调  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ASPNET客户

知识大全 使用ASP.Net中的自定义控件

使用ASP.Net中的自定义控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  if((data

知识大全 Asp.net 用户控件添加自定义事件

Asp.net用户控件添加自定义事件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 使用ASP.Net中的自定义控件[4]

使用ASP.Net中的自定义控件[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &