2009-12-30 98 views
1

我試圖通過操作篩選器屬性實現自定義錯誤處理。ASP.Net MVC自定義錯誤處理通過操作篩選器屬性

我的代碼如下:

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

    public object OhDearACrash() 
    { 
     throw new Exception("Oh Dear"); 
    } 

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

    public ActionResult ThrowNotImplemented() 
    { 
     throw new NotImplementedException(); 
    } 

OhDearACrash和ThrowNotImplemented都是通過這使得位於查看/共享經由Error.aspx錯誤消息[的HandleError]拾取。

例如與OhDearACrash:

Message = <%= ViewData.Model.Exception.Message %> 

呈現

Message = Oh Dear 

NullRefCrash由與ExceptionType = typeof運算(的NullReferenceException)涉及的[HandeError]拾取。

當CustomError企圖使使用

Message = <%= ViewData.Model.Exception.Message %> 

的ViewData.Model爲空併產生一個異常

System.NullReferenceException was unhandled by user code 
Message="Object reference not set to an instance of an object." 

要創建CustomError.aspx錯誤消息我複製Error.aspx並粘貼到我新創建的視圖/錯誤並重命名爲CustomView.aspx。

由於Error.aspx和CustomError.aspx基本相同,這是怎麼發生的?

編輯:

我創建了一個只包含上面和CustomError.aspx視圖工作完全正常測試項目 - 反正有沒有調試我現有的項目找到了問題?

回答

2

我剛剛在ASP.NET MVC 1.0上試了一下,我得到了正確的行爲。

是否有可能你有另一個過濾器正在運行,並以某種方式更改錯誤?

+0

理論上不,它的發生就像我描述的那樣。如果我逐步執行代碼,它將從ThrowNotImplemented到CustomError.aspx,就像從OhDearACrash到Error.aspx一樣。 – 2009-12-30 19:48:36

+0

當我複製了共享視圖目錄中的錯誤頁面並將其粘貼回來並重命名爲MyError,並通過[HandleError(Order = 1,ExceptionType = typeof(NullReferenceException),View =「MyError」)]作品,你在測試中使用了Views/Shared目錄嗎? – 2010-01-01 23:12:49

相關問題