📄 handlingerrs.aspx
字号:
<%@ 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"> </b>
<a class="toc2" href="#custom">自定义错误页</a><br>
<b> <img align="middle" src="/quickstart/images/bullet.gif"> </b>
<a class="toc2" href="#handlerr">以编程方式处理错误</a><br>
<b> <img align="middle" src="/quickstart/images/bullet.gif"> </b>
<a class="toc2" href="#evtlog">写入事件日志</a><br>
<b> <img align="middle" src="/quickstart/images/bullet.gif"> </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>
<%@ Page Debug="true" %>
</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>
<configuration>
<system.web>
<customErrors defaultRedirect="genericerror.htm" mode="remoteonly" />
</system.web>
</configuration>
</pre></div>
<p>
此配置使本地客户端能够看到默认的 ASP.NET 详细错误页,但将远程客户端重定向到自定义页 genericerror.htm。该页也可以是 .aspx 页。ASP.NET 以 <b>QueryString</b> 参数的形式将发生错误的页的路径传递到该错误页。注意:如果执行错误页时产生错误,则将给远程客户端发回空白页。
<p>
<Acme:TabControl runat="server">
<Tab Name="C#">
<%@ Page Language="C#" Description="Error page"%>
<html>
<head>
<title>Error page</title>
</head>
<body>
<h1>Error page</h1>
Error originated on: <%=Request.QueryString["ErrorPage"] %>
</body>
</html>
</Tab>
<Tab Name="VB">
<%@ Page Language="VB" Description="Error page"%>
<html>
<head>
<title>Error page</title>
</head>
<body>
<h1>Error page</h1>
Error originated on: <%=Request.QueryString("ErrorPage") %>
</body>
</html>
</Tab>
<Tab Name="JScript">
<%@ Page Language="JScript" Description="Error page"%>
<html>
<head>
<title>Error page</title>
</head>
<body>
<h1>Error page</h1>
Error originated on: <%=Request.QueryString["ErrorPage"] %>
</body>
</html>
</Tab>
</Acme:TabControl>
<p>
<b>注意:</b>只有映射到 IIS 中的 aspnet_isapi.dll 扩展的文件才产生这些错误。不通过 aspnet_isapi.dll 接受服务的文件不会被 ASP.NET 处理并且产生 IIS 错误。有关配置 IIS 自定义错误的信息,请参阅 IIS 文档。
<p>
下表描述了 <b><customerrors></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><customerrors></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><customerrors></b> 配置节支持内部 <b><error></b> 标记,该标记使 HTTP 状态代码与自定义错误页关联。例如:
<p>
<div class="code"><pre>
<configuration>
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="/genericerror.htm">
<error statusCode="500" redirect="/error/callsupport.htm"/>
<error statusCode="404" redirect="/error/notfound.aspx"/>
<error statusCode="403" redirect="/error/noaccess.aspx"/>
</customErrors>
</system.web>
</configuration>
</pre></div>
<p>
下表描述了 <b><error></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><error></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 + -