<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
        博客園  :: 首頁  :: 新隨筆  :: 聯系 :: 訂閱 訂閱  :: 管理

      ASP.NET中Application_Error對Exception的集中處理

      Posted on 2011-10-16 15:18  隨它去吧  閱讀(5368)  評論(5)    收藏  舉報

      ASP.NET中對Exception的統一集中處理常見的有兩種方式:

      1、通過配置Web.config的customErrors節點,配置defaultRedirect屬性來實現所有“未處理的異常”均跳轉向同一頁面

      2、通過Global.asax中的Application_Error寫代碼實現自己想要的操作

      但在實際使用當中,往往會出現一些問題,比如Application_Error中的代碼未被執行,若使用customErrors那么如何傳遞錯誤信息給目標頁面等等。

      通過我的摸索,總結出一些經驗,記錄如下:

      1、不想通過配置Web.config中customErrors的方法進行頁面跳轉,而是希望在Application_Error中寫代碼進行一些處理然后用Response.Redirect方法跳轉到指定頁面,這種理論上很不錯的方法實際上行不通!Application_Error中寫Response.Redirect來跳轉頁面不會執行!

      2、很多人不想使用配置Web.config實現出錯自動跳轉的原因無非是:跳轉到了一個“死”鏈接,無法傳遞當前的錯誤信息過去,也就沒辦法進行相應的處理!其實這是一個誤解,任何一個aspx網頁都可以使用Server.GetLastError()獲得最后一個異常,也可以使用this.Context.AllErrors獲得全部的未處理異常,你配置的頁面當然也可以,只要他是一個aspx頁面就行。

      //獲得最近一個Exception
      Exception ex = this.Context.Server.GetLastError();
      //獲得所有未處理的Exception集
      Exception[] errors = this.Context.AllErrors;
      
      //然后你可以對他們進行處理了
      

      3、網上有人推薦使用Web.config和Application_Error結合的方式來處理異常可以嗎?當然可以!但個人感覺這不是個好主意,因為沒啥必要。

      我們看一下他們會怎么干:

      Web.config

      <customErrors mode="On" defaultRedirect="Error.aspx">
      

      Global.asax

              protected void Application_Error(object sender, EventArgs e)
              {
                  //獲得最后一個Exception
                  Exception ex = this.Context.Server.GetLastError();
                  //然后進行一系列處理,寫文件日志,寫數據庫都行
      
                  //清除掉Exception,OK啦
                  this.Context.Server.ClearError();
              }
      

      Error.aspx

      protected void Page_Load(object sender, EventArgs e)
      {
              //輸出期望的錯誤頁面
      }
      

      這樣看起來沒問題吧,其實問題大了!你會發現它根本就不往Error.aspx頁面跳轉!為什么?因為Application_Error的處理優先級高于Web.config里面配置的自定義錯誤處理頁面,你在Application_Error里面已經把所有該做的都做了,然后還把Error給Clear掉了,此時已經不會再觸發Web.config里面配置的自動跳轉了!

      有人會說了,那我在Application_Error里面處理完之后不執行那個ClearError(),他不就跳轉過去了嗎?沒錯!這樣一定是可以跳轉的,而且你甚至可以在Error.aspx里面把這個錯誤再取出來一次,然后根據錯誤類型給用戶一個“友好的”錯誤提示,最后別忘了再執行ClearError。這樣是可以達到目的的,可是我真的覺得沒必要,為什么沒必要,看下面。

      4、之所以有人采取3中的做法,無非是考慮到既想進行相應的錯誤捕捉處理,又想給用戶一個“友好的”自定義界面。要達到這樣的效果并不一定非得把兩個結合起來,使用任意一種方法都能做到:

      A、先看使用Web.config配置的方法:

      Web.config

      <customErrors mode="On" defaultRedirect="Error.aspx">

      Error.aspx

      protected void Page_Load(object sender, EventArgs e)
      {
      //獲得最近一個Exception
      Exception ex = this.Context.Server.GetLastError();
      
      //然后你可以對他們進行處理了
      }

      B、使用Application_Error處理

      Global.asax

              protected void Application_Error(object sender, EventArgs e)
              {
                  //獲取Exception
                  Exception ex = this.Context.Server.GetLastError();
                  //處理Exception
      
                  //清除當前的輸出
                  this.Context.Response.Clear();
                  //轉向執行你希望展示給用戶看的錯誤提示頁面樣子(此時網址依然是出錯的那個頁面,但是展示的內容就完全是你自己指定的頁面了)
                  this.Context.Server.Transfer("/Error.aspx");
             //如果非要跳轉到目標頁面(即地址欄也改變成Error.aspx的話)也不是不行,可以變通處理
             this.Context.Response.Write("<script>top.location.href='/Error.aspx';</script>");
              }
      

        

      主站蜘蛛池模板: 三上悠亚日韩精品二区| 亚洲中文字幕一区二区| 亚洲av日韩av永久无码电影| 国产精品不卡一二三区| 亚洲三级香港三级久久| 日日噜噜夜夜狠狠视频| 大乳丰满人妻中文字幕日本| 亚洲精品一区久久久久一品av| 免费人成在线观看网站| 麻豆tv入口在线看| 亚洲国产精品成人综合色在| 国产成人av性色在线影院| 中文字幕制服国产精品| 亚洲 都市 无码 校园 激情| 久久久久香蕉国产线看观看伊| 一出一进一爽一粗一大视频| 国产SUV精品一区二区四| 国产日韩入口一区二区| 99久久成人亚洲精品观看| 无码伊人久久大杳蕉中文无码| 四虎精品国产精品亚洲精| 国产一区二区三区av在线无码观看 | 日本一区二区三区免费播放视频站| 国产欧美久久一区二区| 欧美午夜理伦三级在线观看| 日本一区不卡高清更新二区| 视频一区视频二区亚洲视频| 免费看国产精品3a黄的视频| 少妇熟女高潮流白浆| 亚洲日本精品一区二区| 亚洲精品成人片在线播放| 亚洲www永久成人网站| 久久午夜无码鲁丝片直播午夜精品| 亚洲国产成人精品无码一区二区| 亚洲老女人区一区二视频| 亚洲精品免费一二三区| 修水县| 国产精品偷伦费观看一次 | 男男车车的车车网站w98免费 | 99久久亚洲综合精品成人网| 国产成人精品久久一区二|