我不確定HandleError的不同方式之間有什麼區別。我需要關於HandleError的更多信息
在asp.net的MVC(默認的項目),他們把這個類
[的HandleError]
所以我閱讀一些博客和人身頂說,這
」。 ......告訴框架,如果在控制器中發生未處理的異常,而不是顯示默認的黃色死亡屏幕,它應該提供一個名爲Error的視圖。「
http://blog.dantup.me.uk/2009/04/aspnet-mvc-handleerror-attribute-custom.html
這是否意味着我不應該捕獲任何錯誤(即沒有嘗試捕獲)?
然後我一直在尋找一本書,他們有
[HandleError(ExceptionType=typeof(InsufficientMemoryException),View="About")]
public ActionResult HandleError()
{
throw new
InsufficientMemoryException();
return View("Home");
}
所以他們只是把它放在這個ActionResult的頂部,並給它一個異常類型。我的第一個問題是如果你有多個錯誤,你會拋出什麼?我還以爲你應該處理所有的錯誤。我知道這只是一個小例子,但是如果你不在某處捕獲MemoryException,或者如果你這樣搞砸了「HandleError」?
我也注意到,當在VS中看着HandleError有2個重載方法。其中之一是上面的,另一個是HandError()。
那麼,爲什麼在asp.net MVC示例文件只是[HandleError]而不是[HandleError()]?一個用於行動方法,一個用於班級嗎?我假設HandleError在類的頂部會像HandleError(typeof(Exception))?
最後還有一個叫做IExceptionFilter的東西。所以如果你想記錄所有的異常,或者你有一些特殊的例外,你想用不同的方式做什麼,你是用這個嗎?
就好像我只是想記錄所有的異常,不管我會做出其中的一個,那就是它,但如果我想在NullReferenceexception上做一些特殊的事情,我會做出另一個?
我在看本教程http://dimecasts.net/Casts/CastDetails/37,我沒有看到他們正在談論的這個「ActionFilterAttribute」。這是來自舊版本還是什麼?
顯然它有4種方法可以使用,你必須重寫它們。在我的書,它只是關於這些會談:
- 個IAuthorizationFilter
- IActionFilter
- IResultFilter
- 個IExceptionFilter
,他們是如此沒有壓倒一切的所有接口。他們雖然有4種方法。只有一個或2.
謝謝
哦,還有一件事。你應該總是測試每一個異常嗎?就像我的一種方法可能會遇到7種不同的例外。我應該測試所有7個例外(即扔它們),然後最終抓住它們並處理它們(我通常只是打印一些信息)。
如果是這樣,VS2008會找到可以發生異常的東西。我發現很難說有時會拋出異常,然後我必須追查哪些異常。
嗯所以處理錯誤是如果你想要一個通用頁面的所有錯誤? 如果你想要更具體的錯誤,那麼你把它放在actionView? 「IExceptionFilter」如何使用這個?這會成爲我的日誌記錄(或Elmah代碼)的地方嗎? 另外我還不確定代碼的外觀如何?我不處理錯誤(try/catch)還是我仍然處理它們?我不清楚如果我會處理它們,如果混淆[HandleError]。 另外,如果我處理它們不會阻止ELMAH框架做處理異常的東西嗎?即我需要手動記錄已知的? – chobo2 2009-07-03 04:15:15