概述ASP.NET错误处理
创始人
2024-04-25 11:01:02
0

要创建页中的全局处理程序,请创建 Page_Error 事件的处理程序。要创建ASP.NET应用程序范围的错误处理程序,请在 Global.asax 文件中将代码添加到 Application_Error 方法。只要您的页或应用程序中发生未处理的异常,就会调用这些方法。您可以从 HttpServerUtility.GetLastError 方法获取有关最新错误的信息。
注意   如果您具有全局错误处理程序,则它优先于在 Web.config customErrors 元素的 defaultRedirect 属性中指定的ASP.NET错误处理。

原则(MSDN):在您的应用程序显示错误信息时,它不应该泄露有助于恶意用户攻击您系统的信息。例如,如果您的应用程序试图登录数据库时没有成功,则显示的错误信息不应该包括它正在使用的用户名。

有许多方法可以控制错误信息:

将应用程序配置为不向远程(应用程序)用户显示详细错误信息。您也可以选择将错误重定向到应用程序页。
只要可行就包括ASP.NET错误处理,并编写您自己的错误信息。在您的错误处理程序中,您可以进行测试以确定用户是否为本地用户并作出相应的响应。
在捕捉所有未处理异常并将它们发送到一般错误页的页级别或应用程序级别上,创建全局错误处理程序。这样,即使您没有预料到某个问题,至少用户不会看到异常页。

一.页面级的ASP.NET错误处理

  1. voidPage_Error(Objectsender,EventArgse){  
  2. Stringmessage="" 
  3. +"

    "+Request.Url.ToString()+"

    "  
  4. +"
    <fontcolorfontcolor='red'>"+Server.GetLastError().ToString()+"
    "  
  5. +"";  
  6.  
  7. Response.Write(message);  
  8. Server.ClearError();  

注:通过使用 Server 对象访问来自服务器的错误信息。特别地,该示例从 Request 对象获取请求的 URL,以及 Server 对象的最新错误(使用 GetLastError 方法),并将这两者都转换为客户端可以显示的字符串。将 message 变量写入客户端后,通过使用 ClearError 方法删除该错误

二.应用程序级的错误事件中

错误处理方式如下:global.asax文件中的application_error中添加处理 逻辑,可添加其它操作,如写入windows事件日志,发邮件给管理员,将错误信息写入数据库。具体如下:

  1. protectedvoidApplication_Error(Objectsender,EventArgse)  
  2. {  
  3. StringMessage="\n\nURL:\nhttp://localhost/"+Request.Path  
  4. +"\n\nMESSAGE:\n"+Server.GetLastError().Message  
  5. +"\n\nSTACKTRACE:\n"+Server.GetLastError().StackTrace;  
  6. //写入windows事件日志  
  7. StringLogName="Application";  
  8. if(!EventLog.SourceExists(LogName))  
  9. {  
  10. EventLog.CreateEventSource(LogName,LogName);  
  11. }  
  12. EventLogLog=newEventLog();  
  13. Log.Source=LogName;  
  14. Log.WriteEntry(Message,EventLogEntryType.Error);  

三.web.config中,自定义错误信息。将应用程序配置为不向远程用户显示错误

  1.  mode="RemoteOnly" defaultRedirect="AppErrors.aspx">   
  2.     statusCode="404" redirect="NoSuchPage.aspx"/>   
  3.     statusCode="403" redirect="NoAccessAllowed.aspx"/>   
  4.  


注:将 mode 属性设置为 RemoteOnly(区分大小写)。这就将应用程序配置为仅向本地用户(您和开发人员)显示详细的错误。
(可选)包括指向应用程序错误页的 defaultRedirect 属性。
(可选)包括将错误重定向到特定页的 error 元素。例如,您可以将标准 404 错误(未找到页)重定向到您自己的应用程序页。

四.包括ASP.NET错误处理 (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();  

【编辑推荐】

  1. ASP.NET开发技巧之Theme功能浅析
  2. 详解ASP.NET动态编译
  3. Apache支持ASP.NET方法浅析
  4. 浅谈ASP.NET服务器标准控件
  5. ASP.NET中SQL Server数据库备份恢复浅析

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...