2012-03-19 107 views
0

在ASP中拋出異常(如「ArgumentException」)是個好主意嗎?我紅了一些文章,並且我知道拋出的異常轉到Page_Error方法。在此之後,執行永久停留在這裏。如何在Page_Error之後繼續執行?C#/ ASP - 異常拋出

或者我應該不用扔,讓這樣的事情:

person.name = "blablabla"; 
if (person.NameValidatingError) Response.Write ("Ooops"); 
+0

如果沒有人捕獲它們,那麼異常是毫無意義的 – BlackBear 2012-03-19 17:12:12

+0

什麼是'.NameValidatingError'?它是在對象上設置的布爾值嗎? – Origin 2012-03-19 17:12:30

+0

@up這只是一個例子。 – zgnilec 2012-03-19 17:14:06

回答

0

你應該有一個錯誤頁面爲您的整個應用程序,所有的例外轉移到該頁面。

+0

但我不想要1頁的錯誤,我需要把錯誤信息內的HTML內容W/O重定向等。 – zgnilec 2012-03-19 17:15:26

1

如果您希望參數符合某種驗證規則,並且傳入的參數不符合它們(並且您無法恢復),那麼最好拋出一個ArgumentException來解釋爲什麼它被拒絕。

您應該在page_error然後重定向到錯誤頁面。

0

而不是在設置某些東西后檢查一個變量,如果知道它可能會引發錯誤,則將其封裝在try/catch塊中。

像這樣:

try 
    person.name = "blablabla" 
catch ex as YourExceptionType 
    messagebox.show("There was an error in the foobar") 
end try 

... continue code here 
-1

如果該方法可以處理自己的錯誤,而無需把代碼處於無效狀態,那麼就沒有必要拋出異常。

否則,該方法應該拋出一個異常,留給調用者決定是否知道如何處理異常,或者保持未被捕獲。

+0

downvote的任何理由? – mbeckish 2012-04-18 13:22:00

0

如果我們在談論C#或Asp.Net並不重要,但問題是如果這是一個很好的做法拋出異常。 一般而言,只有在嚴格需要時纔會拋出異常,因爲異常拋出會導致性能下降(有時甚至會隱藏堆棧跟蹤)。 另一個方面是,你可能無法預見的一個例外是,當你編寫該功能,但不是你已經知道它可能發生/避免發生的事情 我建議你儘可能避免拋出異常,如果它在您的域中是必需的,您可以創建一個錯誤頁面以在您每次收到非託管異常時重定向到該頁面。