登录
注册
一览到底
标签
会员
搜索
帮助
ASP.NET学习社区
»
ASP.NET学习区
»
小学水平
»
ASP.NET的错误处理
帖子标题
ASP.NET学习区
自由问答
小学水平
大学水平
职业相关
ASP.NET下载区
ASP.NET教程
ASP.NET源码
ASP.NET开发工具
相关学习
JS,HTML,CSS
ADO.NET
ASP、PHP
其它
灌水区
商业源码交易
站务相关
1/1页
1
跳转到
页
查看:457
ASP.NET的错误处理
aspx1
aspx1
组别:校长
性别:
积分:813
帖子:327
2008-07-17 16:06
| 只看楼主
树型
|
收藏
|
小
中
大
1
#
ASP.NET的错误处理
英文文章研究:
http://wrfwjn.blog.hexun.com/4172839_d.html
总述:
要创建页中的全局处理程序,请创建 Page_Error 事件的处理程序。要创建应用程序范围的错误处理程序,请在 Global.asax 文件中将代码添加到 Application_Error 方法。只要您的页或应用程序中发生未处理的异常,就会调用这些方法。您可以从 HttpServerUtility.GetLastError 方法获取有关最新错误的信息。
注意 如果您具有全局错误处理程序,则它优先于在 Web.config customErrors 元素的 defaultRedirect 属性中指定的错误处理。
原则(MSDN):
在您的应用程序显示错误信息时,它不应该泄露有助于恶意用户攻击您系统的信息。例如,如果您的应用程序试图登录数据库时没有成功,则显示的错误信息不应该包括它正在使用的用户名。
有许多方法可以控制错误信息:
将应用程序配置为不向远程(应用程序)用户显示详细错误信息。您也可以选择将错误重定向到应用程序页。
只要可行就包括错误处理,并编写您自己的错误信息。在您的错误处理程序中,您可以进行测试以确定用户是否为本地用户并作出相应的响应。
在捕捉所有未处理异常并将它们发送到一般错误页的页级别或应用程序级别上,创建全局错误处理程序。这样,即使您没有预料到某个问题,至少用户不会看到异常页。
<一>页面级的错误处理
void
Page_Error(Object sender, EventArgs e)
{
String message
=
"
<font face=verdana color=red>
"
+
"
<h4>
"
+
Request.Url.ToString()
+
"
</h4>
"
+
"
<pre><font color='red'>
"
+
Server.GetLastError().ToString()
+
"
</pre>
"
+
"
</font>
"
;
Response.Write(message);
Server.ClearError();
}
注:通过使用 Server 对象访问来自服务器的错误信息。特别地,该示例从 Request 对象获取请求的 URL,以及 Server 对象的最新错误(使用 GetLastError 方法),并将这两者都转换为客户端可以显示的字符串。将 message 变量写入客户端后,通过使用 ClearError 方法删除该错误
<二>应用程序级的错误事件
中,错误处理方式如下:global.asax文件中的application_error中添加处理 逻辑,可添加其它操作,如写入windows事件日志,发邮件给管理员,将错误信息写入数据库。具体如下:
1
protected
void
Application_Error(Object sender, EventArgs e)
2
{
3
String Message
=
"
\n\nURL:\n http://localhost/
"
+
Request.Path
4
+
"
\n\nMESSAGE:\n
"
+
Server.GetLastError().Message
5
+
"
\n\nSTACK TRACE:\n
"
+
Server.GetLastError().StackTrace;
6
//
写入windows事件日志
7
String LogName
=
"
Application
"
;
8
if
(
!
EventLog.SourceExists(LogName))
9
{
10
EventLog.CreateEventSource(LogName, LogName);
11
}
12
EventLog Log
=
new
EventLog();
13
Log.Source
=
LogName;
14
Log.WriteEntry(Message, EventLogEntryType.Error);
15
}
<三>
web.config中,自定义错误信息
。将应用程序配置为不向远程用户显示错误
<
customErrors mode
=
"
RemoteOnly
"
defaultRedirect
=
"
AppErrors.aspx
"
>
<
error statusCode
=
"
404
"
redirect
=
"
NoSuchPage.aspx
"
/>
<
error statusCode
=
"
403
"
redirect
=
"
NoAccessAllowed.aspx
"
/>
</
customErrors
>
注:将 mode 属性设置为 RemoteOnly(区分大小写)。这就将应用程序配置为仅向本地用户(您和开发人员)显示详细的错误。
(可选)包括指向应用程序错误页的 defaultRedirect 属性。
(可选)包括将错误重定向到特定页的 <error> 元素。例如,您可以将标准 404 错误(未找到页)重定向到您自己的应用程序页。
<四>
包括错误处理 (MSDN)
1.在可能产生错误的任何语句前后使用 try-catch-finally 块。
2.(可选)使用 Context 对象的 UserHostAddress 属性对本地用户进行测试并相应地修改错误处理。值 127.0.0.1 等效于“localhost”并指示浏览器与 Web 服务器位于同一台计算机上。
下面显示的是一个示例错误处理块。如果发生错误,则用有关消息的详细信息加载 Session 状态变量,然后应用程序显示可以读取 Session 变量并显示错误的页。(有意写入此错误以便不向用户提供任何可利用的详细信息。)如果用户是本地用户,则提供不同的错误详细信息。在 finally 块中,释放开放式资源。
1
try
2
{
3
sqlConnection1.Open();
4
sqlDataAdapter1.Fill(dsCustomers1);
5
}
6
catch
(Exception ex)
7
{
8
if
(HttpContext.Current.Request.UserHostAddress
==
"
127.0.0.1
"
)
9
{ Session[
"
CurrentError
"
]
=
ex.Message; }
10
else
11
{ Session[
"
CurrentError
"
]
=
"
Error processing page.
"
; }
12
Server.Transfer(
"
ApplicationError.aspx
"
);
13
}
14
finally
15
{
16
this
.sqlConnection1.Close();
17
}
您也可以创建一个这样的错误处理程序,它在页面级别上或为整个应用程序捕捉所有未处理的异常。
http://www.Aspx1.Com
请帮忙宣传Aspx1 , Aspx1是ASP.NET学习者的家园 , 适宜长期居住.
TOP
发送短消息
查看公共资料
查找该会员全部帖子
UID:1
精华:
51
金钱:230.73 金币
来自:
注册: 2006-10-19
状态:
离线
<<
上一主题
|
下一主题
>>
1/1页
1
跳转到
页
发新主题
论坛跳转...
ASP.NET学习区
自由问答
小学水平
大学水平
职业相关
ASP.NET下载区
ASP.NET教程
ASP.NET源码
BlogEngine学习
Discuz!NT 学习
PetShop 学习
ASP.NET开发工具
相关学习
JS,HTML,CSS
ADO.NET
ASP、PHP
其它
商业源码交易
站务相关
积分不够,无法下载资源,快来这里快速获取积分(金币)!
Aspx1官方VIP群现在可以申请加入了,您够资格么!
基本状况
流量统计
客户软件
发帖量记录
版块排行
主题排行
发帖排行
积分排行
在线时间
我的主题
我的帖子
我的精华
我的附件
我的资料
帖子标题
作 者