2011-07-07 68 views
3

與ASP.NET HttpHandler中的異常處理相關的最佳實踐被認爲是什麼?是否應該允許不能處理的異常在整個鏈中向上流動,或者是否應該在處理程序中捕獲和「處理」所有異常並且不允許任何事情過去?ASP.NET HttpHandler中的異常處理

回答

2

我的建議將是簡單的:如果你不能「解決問題」,那麼不要吞下例外 - 讓它傳播。否則,您很可能會面臨應用程序的意外行爲。

+0

這就是我的想法 - 我正在進行代碼審查,其中採取了「燕子」的方法。在代碼中還有一個不正確的註釋,說它是必需的,以免崩潰讓我變成wince的IIS! – Dokie

+0

不錯,這讓我想起了一個項目,我接管了數以千計的這個SO帖子吞下的異常:http://stackoverflow.com/questions/204814/is-there-any-valid-reason-to-ever-ignore-一個被捕捉的例外,這正是我與之合作的開發人員所說的「它使站點不再崩潰」,這是我腦海中的BS藉口。 – stephenbayer

+2

雖然通常你應該允許異常冒泡到頂層,事實上HttpHandler是頂層,它是UI的一部分,在這一點上,你需要優雅地處理它們。顯然這取決於你的處理程序在做什麼。如果它返回一個圖像,並且異常是由於在數據庫中找不到數據而導致的,則返回401的HttpStatusCode可能更合適。 –

1

你在談論HTTP處理程序或HTTP模塊嗎?由於HTTP處理程序只是例行處理程序(ASP.NET頁面只是簡單的HTTP處理程序)

好吧,如果你的意思是HTTP處理程序,然後我說,這就像一個正常的ASP.NET頁面。你在頁面上做什麼?

但也有,你必須始終考慮一些異常處理的一般準則:

  1. 不要讓最終用戶看到異常頁面(死亡黃屏)。這意味着您必須始終使用try/catchif您的代碼來防止在屏幕上呈現異常。
  2. 永遠不要吞下異常。在任何catch塊中你所做的最少的工作就是記錄它。
  3. 有一個集中的異常處理和消息轉換機制,以便將來的維護更容易。
  4. 首選驗證以及是否檢查捕獲異常,因爲catch塊非常昂貴。

沒有大家爲什麼投這個職位了。我只是想完成這個帖子傢伙:)

+0

請將此添加到評論部分,而不是作爲答案。這不是一個答案。 –

+0

另外他特別說HttpHandlers,我假設是自定義ASP.NET處理程序。 – stephenbayer

+0

是的,我的意思是一個自定義的HttpHandler – Dokie

2

應該以某種方式處理所有異常。如果意外異常通過所有異常處理程序冒出來,您需要向用戶提供某種類型的通知,以防出現問題。應該有一些方法來通知管理員或程序員(日誌,電子郵件或其他),以便可以添加額外的代碼來處理異常情況。您應該嘗試處理可能會彈出的任何異常,例如數據庫關閉時數據庫連接問題。基本上,你希望在你能預測的範圍內儘可能優雅地失敗,如果發生意外事件,故障排除發生的事情,並添加額外的代碼來處理這些情況。

0

你如何處理異常取決於具體的情況,但應該處理的地方發現出了什麼毛病。

應登錄(堆棧跟蹤等錯誤代碼,消息)儘可能多的信息,你可能需要使其更容易重新整頓。 您可能還想記錄丟失的信息(如任何表單詳細信息)或任何安全相關信息。

上述操作後,您只需優雅地重定向到一個相關的錯誤頁面後。