- ASP.NET 教程
- ASP.NET - 首页
- ASP.NET - 简介
- ASP.NET - 环境
- ASP.NET - 生命周期
- ASP.NET - 第一个示例
- ASP.NET - 事件处理
- ASP.NET - 服务器端
- ASP.NET - 服务器控件
- ASP.NET - HTML 服务器控件
- ASP.NET - 客户端
- ASP.NET - 基本控件
- ASP.NET - 指令
- ASP.NET - 状态管理
- ASP.NET - 验证器
- ASP.NET - 数据库访问
- ASP.NET - ADO.NET
- ASP.NET - 文件上传
- ASP.NET - 广告轮播
- ASP.NET - 日历控件
- ASP.NET - 多视图
- ASP.NET - 面板控件
- ASP.NET - AJAX 控件
- ASP.NET - 数据源
- ASP.NET - 数据绑定
- ASP.NET - 自定义控件
- ASP.NET - 个性化设置
- ASP.NET - 错误处理
- ASP.NET - 调试
- ASP.NET - LINQ
- ASP.NET - 安全性
- ASP.NET - 数据缓存
- ASP.NET - Web 服务
- ASP.NET - 多线程
- ASP.NET - 配置
- ASP.NET - 部署
- ASP.NET 资源
- ASP.NET - 快速指南
- ASP.NET - 有用资源
- ASP.NET - 讨论
ASP.NET - 错误处理
ASP.NET 中的错误处理包含三个方面
跟踪 - 在页面级别或应用程序级别跟踪程序执行。
错误处理 - 在页面级别或应用程序级别处理标准错误或自定义错误。
调试 - 单步执行程序,设置断点以分析代码
本章将讨论跟踪和错误处理,下一章将讨论调试。
为了理解这些概念,请创建以下示例应用程序。它包含一个标签控件、一个下拉列表和一个链接。下拉列表加载著名引言的数组列表,并在下面的标签中显示选定的引言。它还有一个指向不存在的链接的超链接。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="errorhandling._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>
Tracing, debugging and error handling
</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblheading" runat="server" Text="Tracing, Debuggin and Error Handling">
</asp:Label>
<br /> <br />
<asp:DropDownList ID="ddlquotes" runat="server" AutoPostBack="True" onselectedindexchanged="ddlquotes_SelectedIndexChanged">
</asp:DropDownList>
<br /> <br />
<asp:Label ID="lblquotes" runat="server">
</asp:Label>
<br /> <br />
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="mylink.htm">Link to:</asp:HyperLink>
</div>
</form>
</body>
</html>
代码隐藏文件
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string[,] quotes =
{
{"Imagination is more important than Knowledge.", "Albert Einsten"},
{"Assume a virtue, if you have it not" "Shakespeare"},
{"A man cannot be comfortable without his own approval", "Mark Twain"},
{"Beware the young doctor and the old barber", "Benjamin Franklin"},
{"Whatever begun in anger ends in shame", "Benjamin Franklin"}
};
for (int i=0; i<quotes.GetLength(0); i++)
ddlquotes.Items.Add(new ListItem(quotes[i,0], quotes[i,1]));
}
}
protected void ddlquotes_SelectedIndexChanged(object sender, EventArgs e)
{
if (ddlquotes.SelectedIndex != -1)
{
lblquotes.Text = String.Format("{0}, Quote: {1}", ddlquotes.SelectedItem.Text, ddlquotes.SelectedValue);
}
}
}
跟踪
要启用页面级跟踪,您需要修改 Page 指令并添加 Trace 属性,如下所示
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="errorhandling._Default" Trace ="true" %>
现在,当您执行文件时,您将获得跟踪信息
它在顶部提供以下信息:
- 会话 ID
- 状态码
- 请求时间
- 请求类型
- 请求和响应编码
每次请求页面时,服务器发送的状态码都会显示任何错误的名称和时间。下表显示常见的 HTTP 状态码
| 编号 | 描述 |
|---|---|
| 信息性 (100 - 199) | |
| 100 | 继续 |
| 101 | 切换协议 |
| 成功 (200 - 299) | |
| 200 | 确定 |
| 204 | 无内容 |
| 重定向 (300 - 399) | |
| 301 | 永久移动 |
| 305 | 使用代理 |
| 307 | 临时重定向 |
| 客户端错误 (400 - 499) | |
| 400 | 错误请求 |
| 402 | 需要付款 |
| 404 | 未找到 |
| 408 | 请求超时 |
| 417 | 期望失败 |
| 服务器错误 (500 - 599) | |
| 500 | 内部服务器错误 |
| 503 | 服务不可用 |
| 505 | 不支持的 HTTP 版本 |
在顶级信息下,有一个跟踪日志,它提供了页面生命周期的详细信息。它提供了自页面初始化以来以秒为单位的经过时间。
下一部分是控件树,它以分层方式列出页面上的所有控件
最后是会话和应用程序状态摘要、cookie 和标头集合,然后是所有服务器变量的列表。
Trace 对象允许您向跟踪输出添加自定义信息。它有两种方法可以实现这一点:Write 方法和 Warn 方法。
更改 Page_Load 事件处理程序以检查 Write 方法
protected void Page_Load(object sender, EventArgs e)
{
Trace.Write("Page Load");
if (!IsPostBack)
{
Trace.Write("Not Post Back, Page Load");
string[,] quotes =
.......................
}
}
运行以观察效果
要检查 Warn 方法,让我们在选定索引更改事件处理程序中强制输入一些错误代码
try
{
int a = 0;
int b = 9 / a;
}catch (Exception e)
{
Trace.Warn("UserAction", "processing 9/a", e);
}
Try-Catch 是 C# 编程结构。try 块包含可能产生错误也可能不产生错误的任何代码,而 catch 块捕获错误。当程序运行时,它会将警告发送到跟踪日志。
应用程序级跟踪适用于网站中的所有页面。它是通过在 web.config 文件中放置以下代码行来实现的
<system.web> <trace enabled="true" /> </system.web>
错误处理
尽管 ASP.NET 可以检测所有运行时错误,但仍然可能存在一些细微的错误。通过跟踪观察错误是针对开发人员的,而不是针对用户的。
因此,为了拦截此类事件,您可以在应用程序的 web.config 文件中添加错误处理设置。这是应用程序范围的错误处理。例如,您可以在 web.config 文件中添加以下几行
<configuration>
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
</system.web>
<configuration>
`
Mode:它启用或禁用自定义错误页面。它有三个可能的值:
- On:显示自定义页面。
- Off:显示 ASP.NET 错误页面(黄色页面)
- remoteOnly:它向客户端显示自定义错误,在本地显示 ASP.NET 错误。
defaultRedirect:它包含在发生未处理错误时要显示的页面的 URL。
要为不同类型的错误放置不同的自定义错误页面,可以使用`
要实现页面级错误处理,可以修改 Page 指令
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="errorhandling._Default" Trace ="true" ErrorPage="PageError.htm" %>
因为 ASP.NET 调试本身就是一个重要的主题,所以我们将在下一章单独讨论它。