2

我有一個MVC 3 web應用程序,我在其中使用「HandleError」Action用於異常處理的過濾器。我有這個動作過濾器實現如下:MVC HandleError過濾器沒有發現異常

[HandleError] 
public class BaseController : Controller {...} 

這是我的所有控制器派生的基類。在我的web.config中,我的Error.cshtml在我的共享文件夾(.cshtml因爲我使用Razor)。一切都已經工作的很好,我得到了一個精美異常處理(我的功能格式化)

最近,不知何故,我得到了和因「的customErrors」的「未處理的異常(YSOD)」,我得到了默認的ASP.Net錯誤消息沒有任何關於實際異常的信息。這發生在AJAX的回帖中。但是,我無法重現它。

是否有可能出現任何類型的錯誤以逃避此操作過濾器?

回答

4

是否有可能出現任何類型的錯誤以逃避此操作過濾器?

HandleError過濾器不捕獲在應用程序中觸發的所有異常。它可以捕獲在動作內部觸發的異常,動作過濾器......僅僅在MVC上下文中。此外,它不捕獲狀態代碼爲500以外的HTTP異常。僅依賴於HandleError過濾器在MVC應用程序中是一個壞主意。

你仍然應該依靠Application_Error事件做一些日誌記錄和customErrors部分顯示一個自定義的錯誤頁面,爲HandleError未捕獲的例外。

我寫了一個博客post在這個問題上,可能會幫助你。

+0

馬克,對不起,遲到了。是的,我遇到了一些例外,例如「UnauthorizedAccessException」(可能是文件訪問)。我同意Application_Error可能是最後一個階段。然而,[HandleError]更像MVC - 這篇文章(http://stackoverflow.com/questions/183316/asp-net-mvc-handleerror - 3rd答案),它允許捕獲這樣的例外。 ELMAH對伐木似乎很好。 –

+0

我昨天嘗試了你的Application_Error代碼,它無法處理「UnauthorizedAccessException」。後來我將代碼更改爲controller.ViewData.Model = new HandleErrorInfo(ex,currentController,currentAction); - 有效!我想知道這是否與[HandleError]共存,或者您是否會在Application_error之後說[HandleError]不再需要。 –

+0

它應該是controller.ViewData.Model = new HandleErrorInfo() – VJAI