国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

asp.net開發中常見公共捕獲異常方式總結(附源碼)

2024-07-10 12:47:38
字體:
來源:轉載
供稿:網友

本文實例總結了asp.net開發中常見公共捕獲異常方式。,具體如下:

前言:在實際開發過程中,對于一個應用系統來說,應該有自己的一套成熟的異常處理框架,這樣當異常發生時,也能得到統一的處理風格,將異常信息優雅地反饋給開發人員和用戶。我們都知道,.net的異常處理是按照“異常鏈”的方式從底層向高層逐層拋出,如果不能盡可能地早判斷異常發生的邊界并捕獲異常,CLR會自動幫我們處理,但是這樣系統的開銷是非常大的,所以異常處理的一個重要原則是“早發現早拋出早處理”。但是本文總結的服務端公共捕獲異常處理可以寬泛地看做是在表現層的操作,要捕獲特定層的特定異常,不在討論范圍內。

1、BasePage類處理方式

在頁面的公共基類里重寫OnError事件。在前面這篇《asp.net實現非常實用的自定義頁面基類》里,樓豬已經貼了代碼,就不再費事了。根據經驗,很多人開發的時候幾乎都這么寫,而且對調試和維護還是很有幫助的。需要說明的是,每新添一個頁面,其對應類都必須繼承自BasePage類異常處理才起作用。

2、Global.asax處理方式

如1中所述,BasePage類的異常處理要求每一個aspx類文件都繼承它,適用性和性能顯然會打折扣。而Global.asax文件定義了asp.net應用程序中的所有應用程序對象共有的方法、屬性和事件,我們可以不采用BasePage的處理方式,在Global.asax里實現Application_Error事件并處理也可以。下面模仿BasePage類里的處理異常方法,實現如下:

/// <summary>/// 出錯處理:寫日志,導航到公共出錯頁面/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void Application_Error(object sender, EventArgs e){  if (Server.GetLastError() == null) return;  Exception ex = Server.GetLastError().GetBaseException();  string error = this.DealException(ex);  DotNet.Common.Util.Logger.WriteFileLog(error, HttpContext.Current.Request.PhysicalApplicationPath + "LogFile");  if (ex.InnerException != null)  {    error = this.DealException(ex);    DotNet.Common.Util.Logger.WriteFileLog(error, HttpContext.Current.Request.PhysicalApplicationPath + "LogFile");  }  this.Server.ClearError();  this.Response.Redirect("/Error.aspx");}/// <summary>/// 處理異常,用來將主要異常信息寫入文本日志/// </summary>/// <param name="ex"></param>/// <returns></returns>private string DealException(Exception ex){  this.Application["StackTrace"] = ex.StackTrace;  this.Application["MessageError"] = ex.Message;  this.Application["SourceError"] = ex.Source;  this.Application["TargetSite"] = ex.TargetSite.ToString();  string error = string.Format("URl:{0}/n引發異常的方法:{1}/n錯誤信息:{2}/n錯誤堆棧:{3}/n",    this.Request.RawUrl, ex.TargetSite, ex.Message, ex.StackTrace);  return error;}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 惠东县| 盘山县| 临桂县| 陆川县| 纳雍县| 手游| 西藏| 平和县| 吕梁市| 海丰县| 林西县| 湖南省| 平潭县| 开化县| 北川| 五指山市| 平阳县| 时尚| 孟津县| 嵊州市| 尼勒克县| 赤峰市| 苏州市| 聂荣县| 涞源县| 嘉定区| 韶山市| 犍为县| 云林县| 容城县| 葵青区| 简阳市| 泸水县| 石渠县| 阜南县| 萨迦县| 元朗区| 区。| 托克逊县| 马尔康县| 镇康县|