我試圖通過操作篩選器屬性實現自定義錯誤處理。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視圖工作完全正常測試項目 - 反正有沒有調試我現有的項目找到了問題?
理論上不,它的發生就像我描述的那樣。如果我逐步執行代碼,它將從ThrowNotImplemented到CustomError.aspx,就像從OhDearACrash到Error.aspx一樣。 – 2009-12-30 19:48:36
當我複製了共享視圖目錄中的錯誤頁面並將其粘貼回來並重命名爲MyError,並通過[HandleError(Order = 1,ExceptionType = typeof(NullReferenceException),View =「MyError」)]作品,你在測試中使用了Views/Shared目錄嗎? – 2010-01-01 23:12:49