自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

介紹錯誤處理機制ASP.NET

開發(fā) 后端
本文介紹ASP.NET的錯誤處理機制,ASP.NET的設(shè)計者確實站在開發(fā)者的角度作了周全的考慮,因此提供了多達(dá)四種的錯誤處理機制供我們選用,這一點是值得稱道的。

對于一個Web應(yīng)用程序來說,出錯是在所難免的,因此我們應(yīng)該未雨綢繆,為可能出現(xiàn)的錯誤提供恰當(dāng)?shù)奶幚怼J聦嵣?,良好的錯誤處理機制正是衡量Web應(yīng)用程序好壞的一個重要標(biāo)準(zhǔn)。試想一下,當(dāng)用戶不小心在瀏覽器輸入了錯誤的URL或者當(dāng)用戶提供了一些信息導(dǎo)致程序出錯的時候,如果我們沒有對這些情況進行處理,而是任由404或是500的錯誤頁面甚至出錯的堆棧信息呈現(xiàn)在用戶面前,這無疑會把一些用戶給嚇跑。所以,在我們開發(fā)Web應(yīng)用程序的時候,應(yīng)該對錯誤處理機制有充分的了解。
 
讓我們回到ASP.NET上來,先提兩個問題讓大家思考一下:ASP.NET為我們提供了幾種錯誤處理機制呢?如果同時采用了幾種錯誤處理機制,它們之間是否存在一定的優(yōu)先級呢?帶著這個問題,我們先來看一下我們最常見的Web.Config文件:

  1. <?xmlversionxmlversion="1.0"?> 
  2. <configuration> 
  3. <system.web> 
  4. <customErrorsmodecustomErrorsmode="On"defaultRedirect="GenericErrorPage.htm"> 
  5. <errorstatusCodeerrorstatusCode="403"redirect="Error403.htm"/> 
  6. <errorstatusCodeerrorstatusCode="404"redirect="Error404.htm"/> 
  7. </customErrors> 
  8. </system.web> 
  9. </configuration> 

對于<customErrors>這個設(shè)置項,我想無需多言了,詳情可以參考MSDN的。***種錯誤處理機制——使用Web.Config的<customErrors>配置項應(yīng)該是大家最常用的。

接著,我們再看另外一個也很常用的文件:Global.asax。提到這個文件,大家想到了什么呢?對,就是跟兩大Web應(yīng)用程序?qū)ο螅ˋpplication、Session)相關(guān)的事件了。在這些事件當(dāng)中,有一個屬于Application范疇的與錯誤相關(guān)的事件——Error,而對應(yīng)的事件處理方法就是Application_Error了。顧名思義,這個事件處理方法在應(yīng)用程序級別錯誤發(fā)生的時候就會被調(diào)用,因此你可以在這個方法中添加代碼來對錯誤進行處理,如下所示:

  1. protectedvoidApplication_Error(objectsender,EventArgse){  
  2. ExceptionobjErr=Server.GetLastError().GetBaseException();  
  3. Response.Write("Error:"+objErr.Message);  
  4. Server.ClearError();  

在這里,大家要注意***一句代碼Server.ClearError()的使用,為什么要使用這句代碼呢?如果不用又會怎樣呢?在這里我又先賣個關(guān)子。好了,第二種錯誤處理機制——使用Global.asax中的Application_Error事件處理方法也登臺亮相了。

以上這兩種錯誤處理方法都可以說是全局性的,一個源自應(yīng)用程序配置文件,一個則是必須放在應(yīng)用程序根目錄下的Global.asax文件的事件處理方法。與全局相對的就是局部,所以我們很自然的就會想:有沒有應(yīng)用于局部——某個頁面的錯誤處理機制呢?答案是“有的”,而且還有兩種————使用ErrorPage屬性以及使用Page_Error事件處理方法。對于***種機制,你幾乎可以在任何時候設(shè)置ErrorPage屬性,從而確定頁面發(fā)生錯誤的時候會重定向至哪個頁面;對于第二種機制而言,它與Application_Error事件處理方法是很類似的,只不過被觸發(fā)的時機不同而已。以下是具體的兩個例子:

  1. <scriptlanguagescriptlanguage="C#"runat="server"> 
  2. protectedvoidPage_Load(objectsender,EventArgse){  
  3. this.ErrorPage="ErrorPage.htm";  
  4.  
  5. }  
  6. </script> 
  1. protectedvoidPage_Error(objectsender,EventArgse){  
  2. ExceptionobjErr=Server.GetLastError().GetBaseException();  
  3. Response.Write("Error:"+objErr.Message);  
  4. Server.ClearError();//同樣要注意這句代碼的使用  

至此,四種錯誤處理機制已經(jīng)悉數(shù)登場,是時候給它們排個名次了。根據(jù)優(yōu)先級從高到低排序:Page_Error事件處理方法 > ErrorPage屬性 > Application_Error事件處理方法 >  <customErrors>配置項。雖然排序是這樣,但是這個排序之間又有微妙的關(guān)系。首先,要讓ErrorPage屬性能夠發(fā)揮作用,<customErrors>配置項中的 mode屬性必須設(shè)為"On";其次,雖然Page_Error事件處理方法排在最前面,但是,如果少掉了Server.ClearError()方法的話,仍然會引發(fā)優(yōu)先級較低的錯誤處理,也就是說ErrorPage屬性等錯誤處理機制仍然會發(fā)揮作用,這樣就得不到你想要的結(jié)果了。這種情況對于Application_Error事件處理方法也是如此。順序是排好了,但是順序卻不是最重要的問題,甚至可以說是沒有太多意義的問題,因為在很多情況下,你可能并不會混合使用這四種處理機制。我想,最重要的問題還是在如何選用這些錯誤處理機制上。對于這個問題,希望有經(jīng)驗的朋友能夠談?wù)効捶ā?/P>

好了,關(guān)于ASP.NET的四種錯誤處理機制就介紹到這里,也該說說自己的一些感受了。ASP.NET的設(shè)計者確實站在開發(fā)者的角度作了周全的考慮,因此提供了多達(dá)四種的錯誤處理機制供我們選用,這一點是值得稱道的。但是套用一句廣告詞——多則惑,我們也會被這么多的錯誤處理機制弄得有些頭暈。對照J(rèn)2EE領(lǐng)域中的錯誤處理,我們可以發(fā)現(xiàn)會相對簡單一些。首先是對應(yīng)<customErrors>的設(shè)置,我們也可以從 J2EE項目最常用的web.xml文件中找到類似的配置項:<errorPage>;其次,在J2EE的領(lǐng)域中,Page并不是一個重要的實體而且事件驅(qū)動模型也不是必需的,所以我還真的找不到與Application_Error和Page_Error方法對應(yīng)的處理機制;***,在 J2EE的領(lǐng)域中,更多強調(diào)的是Request和Response,一旦在邏輯處理中出現(xiàn)了錯誤,我們可以很容易地通過 RequestDispatcher將Request分發(fā)到相應(yīng)的錯誤處理模塊中,事實上這是非常靈活的一種處理方式,有興趣的朋友不妨了解一下。

【編輯推薦】

  1. 簡單介紹ASP應(yīng)用程序
  2. ASP.NET的IScriptControl
  3. 詳解ASP.NET身份驗證服務(wù)
  4. 概述ASP.NET安全
  5. ASP.NET ISAPI
責(zé)任編輯:佚名 來源: cnblogs
相關(guān)推薦

2009-06-19 16:20:14

ASP.NET錯誤處理

2009-08-05 16:04:50

2009-07-31 14:49:22

asp.net自定義錯

2024-09-24 17:34:05

2021-03-02 09:12:25

Java異常機制

2009-08-19 09:23:40

ASP.NET Rou

2009-07-22 16:05:34

ASP.NET AJA

2009-07-29 17:23:17

ASP.NET表單

2009-07-29 10:02:49

ASP.NET上傳

2009-07-29 09:14:36

ASP.NET網(wǎng)站

2009-07-21 10:40:36

ASP.NET Pro

2009-07-29 17:26:39

ASP.NET頁面

2009-07-23 14:17:41

2009-09-10 14:02:08

LINQ ASP.NE

2009-07-20 16:12:21

ASP.NET Fra

2009-07-27 17:00:29

ASP.NET主機

2015-10-09 13:54:14

切面編程錯誤處理機制

2009-08-03 17:35:07

ASP.NET WebASP.NET編程工具

2009-08-04 15:22:33

ASP.NET緩存機制

2011-07-21 15:20:41

java異常處理機制
點贊
收藏

51CTO技術(shù)棧公眾號