⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 handlingerrs.aspx

📁 书籍教程 >> .Net教程 >> asp.net编程精彩百例
💻 ASPX
📖 第 1 页 / 共 2 页
字号:
<%@ Register TagPrefix="Acme" Namespace="Acme" Assembly="QSTools" %>
<%@ Register TagPrefix="Acme" TagName="SourceRef" Src="/quickstart/aspplus/util/SrcRef.ascx"%>

<!-- #include virtual="/quickstart/aspplus/include/header.inc" -->

<h4>处理错误</h4>

<div class="indent" style="font-family:Verdana; font-size:8pt;">
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b>
    <a class="toc2" href="#custom">自定义错误页</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b>
    <a class="toc2" href="#handlerr">以编程方式处理错误</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b>
    <a class="toc2" href="#evtlog">写入事件日志</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b>
    <a class="toc2" href="#summary">本节小结</a><br>
</div>

<p>
<hr>
<p>
当页面上出现错误时,ASP.NET 将有关该错误的信息发送到客户端。错误分为四类:
<ul>
<li>配置错误:当配置层次结构中的 Web.config 文件的语法或结构不正确时发生。</li>
<li>分析错误:当页上的 ASP.NET 语法格式不正确时发生。</li>
<li>编译错误:当页的目标语言的语句不正确时发生。</li>
<li>运行时错误:在页执行期间发生,即使编译时检测不到该错误。</li>
<p>

默认情况下,为运行时错误显示的信息是调用堆栈(导致异常的过程调用链)。如果启用了调试模式,ASP.NET 将显示源代码中发生运行时错误的行号。调试模式是有价值的应用程序调试工具。可以通过下列指令启用页级别调试模式:
<p>
<div class="code"><pre>
&lt;%@ Page Debug="true" %&gt;
</pre></div>
<p>

也可以通过应用程序根目录中的 Web.config 文件启用应用程序级别的调试模式,如下面的示例所示。
<p><b>  注意:</b>运行调试模式将产生严重的性能损失。在部署已完成的应用程序之前,请务必禁用该模式。
<p>  下面的示例说明如何使用调试模式显示运行时异常的源行号。
<p>

<Acme:LangSwitch runat="server">
  <CsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/apps/errors/handlerr/CS/error1.aspx"
  ViewSource="/quickstart/aspplus/samples/apps/errors/handlerr/error1.src"
  Icon="/quickstart/aspplus/images/genicon.gif"
  Caption="C# Error1.aspx"
  runat="server" />
  </CsTemplate>
  <VbTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/apps/errors/handlerr/VB/error1.aspx"
  ViewSource="/quickstart/aspplus/samples/apps/errors/handlerr/error1.src"
  Icon="/quickstart/aspplus/images/genicon.gif"
  Caption="VB Error1.aspx"
  runat="server" />
  </VbTemplate>
  <JsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/apps/errors/handlerr/JS/error1.aspx"
  ViewSource="/quickstart/aspplus/samples/apps/errors/handlerr/error1.src"
  Icon="/quickstart/aspplus/images/genicon.gif"
  Caption="JScript Error1.aspx"
  runat="server" />
  </JsTemplate>
</Acme:LangSwitch>

<p>

<!--BEGIN SUB SECTION--> <a name="custom"><span class="subhead">自定义错误页</span>
<p>

根据具体的情况,可能需要以不同的方式处理应用程序错误。例如,开发时可能需要查看 ASP.NET 提供的详细错误页,以帮助确定和修复问题。然而,一旦应用程序应用于生产环境,您可能不想向客户所在的客户端显示详细的错误。可以使用 ASP.NET 指定是向本地客户端、远程客户端还是这两者显示错误。默认情况下,仅向本地客户端(即服务器所在的同一计算机上的客户端)显示错误。也可以指定自定义错误页,以在发生错误时将客户端重定向到该页。
<p>

在 Web.config 文件中为某个应用程序启用自定义错误。例如:

<p>
<div class="code"><pre>
&lt;configuration&gt;
     &lt;system.web&gt;
         &lt;customErrors defaultRedirect="genericerror.htm" mode="remoteonly" /&gt;
     &lt;/system.web&gt;
&lt;/configuration&gt;
</pre></div>

<p>
此配置使本地客户端能够看到默认的 ASP.NET 详细错误页,但将远程客户端重定向到自定义页 genericerror.htm。该页也可以是 .aspx 页。ASP.NET 以 <b>QueryString</b> 参数的形式将发生错误的页的路径传递到该错误页。注意:如果执行错误页时产生错误,则将给远程客户端发回空白页。
<p>

<Acme:TabControl runat="server">
<Tab Name="C#">
&lt;%@ Page Language="C#" Description="Error page"%&gt;

&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Error page&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;h1&gt;Error page&lt;/h1&gt;
Error originated on: &lt;%=Request.QueryString["ErrorPage"] %&gt;
&lt;/body&gt;
&lt;/html&gt;
</Tab>
<Tab Name="VB">
&lt;%@ Page Language="VB" Description="Error page"%&gt;

&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Error page&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;h1&gt;Error page&lt;/h1&gt;
Error originated on: &lt;%=Request.QueryString("ErrorPage") %&gt;
&lt;/body&gt;
&lt;/html&gt;
</Tab>
<Tab Name="JScript">
&lt;%@ Page Language="JScript" Description="Error page"%&gt;

&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Error page&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;h1&gt;Error page&lt;/h1&gt;
Error originated on: &lt;%=Request.QueryString["ErrorPage"] %&gt;
&lt;/body&gt;
&lt;/html&gt;
</Tab>
</Acme:TabControl>

<p>
<b>注意:</b>只有映射到 IIS 中的 aspnet_isapi.dll 扩展的文件才产生这些错误。不通过 aspnet_isapi.dll 接受服务的文件不会被 ASP.NET 处理并且产生 IIS 错误。有关配置 IIS 自定义错误的信息,请参阅 IIS 文档。
<p>
下表描述了 <b>&lt;customerrors&gt;</b> 标记的配置属性和值。
<p>
<table class="table2" width="90%" cellpadding=3>
<tr>
<th width="20%">属性</th><th width="100%">说明</th>
</tr>
<tr>
  <td>
<b>Mode</b>
  </td>
<td>指示是启用、禁用自定义错误还是只将其显示给远程计算机。值:<b>On</b>、<b>Off</b>、<b>RemoteOnly</b>(默认)。
</td>
</tr>
<tr>
  <td>
<b>DefaultRedirect</b>
  </td>
<td>指示发生错误时浏览器应重定向到的默认 URL。此属性可选。
  </td>
</tr>
</table>

<p>

<b>Mode</b> 属性确定是向本地客户端、远程客户端还是这两者显示错误。下表描述了每项设置的作用。

<p>

<table class="table2" width="90%" cellpadding=3>
<tr>
<th width="20%">Mode</th><th width="40%">本地宿主请求</th><th width="40%">远程宿主请求</th>
</tr>
<tr>
  <td>
<b>On</b>
  </td>
  <td>
自定义错误页。
  </td>
  <td>
自定义错误页。
  </td>
</tr>
<tr>
  <td>
<b>Off</b>
  </td>
  <td>
ASP.NET 错误页。
  </td>
  <td>
ASP.NET 错误页。
  </td>
</tr>
<tr>
  <td>
<b>RemoteOnly</b>
  </td>
  <td>
ASP.NET 错误页。
  </td>
  <td>
自定义错误页。
  </td>
</tr>
</table>

<p>
下面的示例说明如何使用 <b>&lt;customerrors&gt;</b> 配置节。
<p>

<Acme:LangSwitch runat="server">
  <CsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/apps/errors/custom1/CS/custom1.aspx"
  ViewSource="/quickstart/aspplus/samples/apps/errors/custom1/custom1.src"
  Icon="/quickstart/aspplus/images/genicon.gif"
  Caption="C# Custom1.aspx"
  runat="server" />
  </CsTemplate>
  <VbTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/apps/errors/custom1/VB/custom1.aspx"
  ViewSource="/quickstart/aspplus/samples/apps/errors/custom1/custom1.src"
  Icon="/quickstart/aspplus/images/genicon.gif"
  Caption="VB Custom1.aspx"
  runat="server" />
  </VbTemplate>
  <JsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/apps/errors/custom1/JS/custom1.aspx"
  ViewSource="/quickstart/aspplus/samples/apps/errors/custom1/custom1.src"
  Icon="/quickstart/aspplus/images/genicon.gif"
  Caption="JScript Custom1.aspx"
  runat="server" />
  </JsTemplate>
</Acme:LangSwitch>

<p>
除了将所有的错误重定向到一个公共页外,还可以将特定的错误页分配给特定的错误状态代码。<b>&lt;customerrors&gt;</b> 配置节支持内部 <b>&lt;error&gt;</b> 标记,该标记使 HTTP 状态代码与自定义错误页关联。例如:
<p>

<div class="code"><pre>
&lt;configuration&gt;
  &lt;system.web&gt;
    &lt;customErrors mode="RemoteOnly" defaultRedirect="/genericerror.htm"&gt;
      &lt;error statusCode="500" redirect="/error/callsupport.htm"/&gt;
      &lt;error statusCode="404" redirect="/error/notfound.aspx"/&gt;
      &lt;error statusCode="403" redirect="/error/noaccess.aspx"/&gt;
    &lt;/customErrors&gt;
  &lt;/system.web&gt;
&lt;/configuration&gt;
</pre></div>

<p>
下表描述了 <b>&lt;error&gt;</b> 标记的属性和值。
<p>

<table class="table2" width="90%" cellpadding=3>
<tr>
<th width="20%">属性</th><th width="100%">说明</th>
</tr>
<tr>
  <td>
<b>StatusCode</b>
  </td>
  <td>
自定义错误页应用于的 HTTP 错误状态代码。例如:403 已禁止、404 未找到、500 内部服务器错误。
</td>
</tr>
<tr>
  <td>
<b>Redirect</b>
  </td>
  <td>
发生错误时客户端浏览器应重定向到的 URL。
  </td>
</tr>
</table>

<p>
下面的示例说明如何使用 <b>&lt;error&gt;</b> 标记。注意:此示例为“未找到文件”错误指定的是 .aspx 页,以便可以输出通过 <b>QueryString</b> 传递的丢失页 URL。
<p>

<Acme:LangSwitch runat="server">
  <CsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/apps/errors/custom2/CS/custom2.aspx"
  ViewSource="/quickstart/aspplus/samples/apps/errors/custom2/custom2.src"
  Icon="/quickstart/aspplus/images/genicon.gif"
  Caption="C# Custom2.aspx"
  runat="server" />
  </CsTemplate>
  <VbTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/apps/errors/custom2/VB/custom2.aspx"
  ViewSource="/quickstart/aspplus/samples/apps/errors/custom2/custom2.src"
  Icon="/quickstart/aspplus/images/genicon.gif"
  Caption="VB Custom2.aspx"
  runat="server" />
  </VbTemplate>
  <JsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/apps/errors/custom2/JS/custom2.aspx"
  ViewSource="/quickstart/aspplus/samples/apps/errors/custom2/custom2.src"
  Icon="/quickstart/aspplus/images/genicon.gif"
  Caption="JScript Custom2.aspx"
  runat="server" />

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -