ASP.Net之C#中的異常處理[1]
作者:ASP.NET 2.0+SQL Server 來源:希賽網
基礎知識
程序開發中,數據流按照一定的規律進行傳輸,如果用戶和程序之間的交互完全按照預定的效果運行,程序不會出現問題??梢约僭O所處理的數據都符合要求,通過界面作格式判定,所有資源都正確,但是為了系統的安全,需要處理存在的隱患,不能對數據安全抱有理想化的想法。
在ASP.NET中,錯誤處理分為兩個層面:頁面輸入信息驗證、CLR提供的結構化錯誤處理機制。
在頁面輸入信息判斷中,可以采用JavaScript、VBScript等腳本進行判斷,也可以使用.NET 環境下帶有的Validation和正則表達式的方式將信息在提交執行處理前,進行格式判斷。格式判斷包括:網絡地址、電子信箱、輸入字符串長短和輸入信息的數據類型的判斷等。
結構化異常處理是CLR的基礎部分,具有以下特點:可以跨語言,異??梢栽谝环N語言中引發,在另外一種語言中捕捉處理;分層處理,一個異??梢园硗庖粋€異常,這意味著系統可以捕獲底層對象(如數據層和業務層)的異常,引發自己的異常,包含有底層對象的異常。這樣可以將異常進行細致分類,使得異常更容易處理。
結構化異常處理,一般要使用3部分代碼。
(1)Try:是程序中可能出現錯誤的操作部分。
(2)Catch:是用來處理各種錯誤的部分(可以有多個)。必須正確排列捕獲異常的Catch子句,范圍小的Exception放在前面的Catch。即如果Exception之間存在繼承關系,就應把子類的Exception放在前面的Catch子句中。
(3)Finally 塊的代碼用來清理資源或執行要在Try塊末尾執行的其他操作(可以省略)。無論是否產生異常,Finally塊都會執行。
結構化異常處理
異常是在程序設計中無法避免的錯誤,設計的程序必須能夠處理所有可能出現的錯誤。所以要全面考慮異常處理,將一切可能出現異常的代碼都進行try的捕捉,然后建立自己的異常處理機制,按照不同的異常情況進行分類處理。
異常產生的時候,需要知道是什么原因造成的錯誤以及錯誤的相關信息。根據實際情況拋出具體類型的異常,然后建立捕捉機制,捕捉到異常時做出具體的處理。在編寫代碼過程中,可以使用系統已定義的相關異常類以及自定義的異常類來實例化并拋出需要的異常。如一個不可能實現的接口,可以拋出System.NotSupportedExceptiion的異常來告訴接口的調用者。
在處理異常的時候,應該將可處理的具體異常分別在catch 塊中作出相應處理,否則程序將終止運行。針對每一種異常,以不同方式處理,避免對所有異常做出一樣的處理。并且在異常產生時,給用戶一個友好的提示(最終用戶對系統異常的具體內容是不明白的,這就需要給出相關的信息提示和解決方案,或告訴聯系管理員等),并在可能的情況下給用戶提供選擇(確定和取消),讓用戶來決定系統的運行方向。同時,程序中要將異常做日志記錄。不是所有異常都是必須記錄的,例如一些可捕捉并且已經安排程序進行處理的異常就不需要記錄它。
[1原文轉自:http://www.anti-gravitydesign.com