ASP.Net MVC自定义错误处理通过操作筛选器属性
问题描述:
我试图通过操作筛选器属性实现自定义错误处理。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视图工作完全正常测试项目 - 反正有没有调试我现有的项目找到了问题?
答
我刚刚在ASP.NET MVC 1.0上试了一下,我得到了正确的行为。
是否有可能你有另一个过滤器正在运行,并以某种方式更改错误?
理论上不,它的发生就像我描述的那样。如果我逐步执行代码,它将从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