2009-12-29 31 views
1

我試圖實現錯誤使用操作過濾器處理屬性按ScottGu的blog使用操作過濾器ASP.Net MVC中的錯誤處理屬性

我的代碼如下:

[HandleError] 
[HandleError(ExceptionType = typeof(NullReferenceException), View = "CustomError")] 
public class ArticlesController : Controller 
{ 
    public object OhDearACrash() 
    { 
     throw new Exception("Oh Dear"); 
    } 

    public object NullRefCrash() 
    { 
     throw new NullReferenceException(); 
    } 

我遇到的問題我從來沒有能夠擊中CustomError視圖,因爲我會在拋出異常時收到異常

OhDearCrash:異常未被用戶代碼處理

NullRefCrash:NullReferenceException被用戶代碼未處理

因此,未處理的異常由Default [HandleError]路由到View/Shared/Error.aspx處理錯誤。

如何處理未處理的異常?

+0

你有你需要的一切的NullReferenceException要正確處理?在你的帖子中說「OhDearACrash」的地方會拋出什麼異常? – 2009-12-29 22:12:48

+0

我可以擊中CustomError頁面(如下所示),但我想我無法在CustomError中正確處理它,因爲Action = <%=(((HandleErrorInfo)ViewData.Model).ActionName%>
也收到NullReferenceException被用戶代碼 – 2009-12-29 22:34:58

回答

5

動作過濾器逐個執行。在你的情況下,問題可能是通用的HandleError操作過濾器在特定的之前執行。

您可以通過設置您的操作篩選的「訂單」屬性影響執行的順序:

[HandleError(Order = 2)] 
[HandleError(Order = 1, ExceptionType = typeof(NullReferenceException), View = "CustomError")] 
public class ArticlesController : Controller 
{ 
} 
+0

這工作,並使我打CustomError,謝謝! – 2009-12-29 22:32:05

+0

如Scott所說'您可以選擇指定您希望捕獲的特定異常類型,並通過在[HandleError]屬性中指定「ExceptionType」和「View」屬性爲它們指定自定義錯誤視圖:'爲什麼需要訂單當我指定例外類型? – 2009-12-29 22:53:25

+0

如果通用的HandleError過濾器先被命中,它將處理異常(任何異常,所以你的NullReference異常也是如此)。你的第二個HandleError動作過濾器將不會被再次擊中。 – jeroenh 2009-12-30 09:34:19