與ASP.NET HttpHandler中的異常處理相關的最佳實踐被認爲是什麼?是否應該允許不能處理的異常在整個鏈中向上流動,或者是否應該在處理程序中捕獲和「處理」所有異常並且不允許任何事情過去?ASP.NET HttpHandler中的異常處理
回答
我的建議將是簡單的:如果你不能「解決問題」,那麼不要吞下例外 - 讓它傳播。否則,您很可能會面臨應用程序的意外行爲。
你在談論HTTP處理程序或HTTP模塊嗎?由於HTTP處理程序只是例行處理程序(ASP.NET頁面只是簡單的HTTP處理程序)
好吧,如果你的意思是HTTP處理程序,然後我說,這就像一個正常的ASP.NET頁面。你在頁面上做什麼?
但也有,你必須始終考慮一些異常處理的一般準則:
- 不要讓最終用戶看到異常頁面(死亡黃屏)。這意味着您必須始終使用
try/catch
或if
您的代碼來防止在屏幕上呈現異常。 - 永遠不要吞下異常。在任何catch塊中你所做的最少的工作就是記錄它。
- 有一個集中的異常處理和消息轉換機制,以便將來的維護更容易。
- 首選驗證以及是否檢查捕獲異常,因爲catch塊非常昂貴。
沒有大家爲什麼投這個職位了。我只是想完成這個帖子傢伙:)
請將此添加到評論部分,而不是作爲答案。這不是一個答案。 –
另外他特別說HttpHandlers,我假設是自定義ASP.NET處理程序。 – stephenbayer
是的,我的意思是一個自定義的HttpHandler – Dokie
應該以某種方式處理所有異常。如果意外異常通過所有異常處理程序冒出來,您需要向用戶提供某種類型的通知,以防出現問題。應該有一些方法來通知管理員或程序員(日誌,電子郵件或其他),以便可以添加額外的代碼來處理異常情況。您應該嘗試處理可能會彈出的任何異常,例如數據庫關閉時數據庫連接問題。基本上,你希望在你能預測的範圍內儘可能優雅地失敗,如果發生意外事件,故障排除發生的事情,並添加額外的代碼來處理這些情況。
你如何處理異常取決於具體的情況,但應該處理的地方發現出了什麼毛病。
應登錄(堆棧跟蹤等錯誤代碼,消息)儘可能多的信息,你可能需要使其更容易重新整頓。 您可能還想記錄丟失的信息(如任何表單詳細信息)或任何安全相關信息。
上述操作後,您只需優雅地重定向到一個相關的錯誤頁面後。
- 1. 在asp.net中處理異常
- 2. asp.net未處理的異常
- 3. ASP.NET異常處理工具
- 4. 異常處理ASP.NET MVC
- 5. ASP.NET MVC異常處理
- 6. ASP.NET 5中的全局異常處理
- 7. 如何處理ASP.NET中的WCF異常
- 8. 在asp.net中的異常處理
- 9. 如何處理asp.net中的異常?
- 10. ASP.NET MVC 4中的異常處理5
- 11. ASP.NET Webforms中的異常處理
- 12. ASP.NET的HttpHandler VS IIS處理程序
- 13. 在asp.net web表單中處理異常
- 14. 在ASP.NET 3.5中實現異常處理
- 15. 處理asp.net核心中某些異常類型的異常?
- 16. 異常處理:多次處理異常
- 17. 在asp.net中處理未處理的異常
- 18. 如何在ASP.NET中處理未處理的線程異常?
- 19. 未處理的異常CachedRawResponse asp.net
- 20. ASP.NET MVC未處理的圖像異常?
- 21. asp.net處理iframe內的異常
- 22. 如何處理異常處理代碼中的異常?
- 23. php異常處理異常
- 24. UpdatePanel異常處理
- 25. 異常處理
- 26. 異常處理
- 27. 異常處理
- 28. 異常處理
- 29. 處理異常
- 30. 異常處理
這就是我的想法 - 我正在進行代碼審查,其中採取了「燕子」的方法。在代碼中還有一個不正確的註釋,說它是必需的,以免崩潰讓我變成wince的IIS! – Dokie
不錯,這讓我想起了一個項目,我接管了數以千計的這個SO帖子吞下的異常:http://stackoverflow.com/questions/204814/is-there-any-valid-reason-to-ever-ignore-一個被捕捉的例外,這正是我與之合作的開發人員所說的「它使站點不再崩潰」,這是我腦海中的BS藉口。 – stephenbayer
雖然通常你應該允許異常冒泡到頂層,事實上HttpHandler是頂層,它是UI的一部分,在這一點上,你需要優雅地處理它們。顯然這取決於你的處理程序在做什麼。如果它返回一個圖像,並且異常是由於在數據庫中找不到數據而導致的,則返回401的HttpStatusCode可能更合適。 –