我正在尝试通过动作过滤器属性实现自定义错误处理。
我的代码如下:
[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都被[HandleError]选中,它通过位于Views / Shared中的Error.aspx呈现错误消息。
例如使用OhDearACrash:
Message = <%= ViewData.Model.Exception.Message %>
呈现
Message = Oh Dear
NullRefCrash由处理ExceptionType = typeof(NullReferenceException)的[HandeError]拾取。
当CustomError尝试使用
呈现错误消息时Message = <%= ViewData.Model.Exception.Message %>
ViewData.Model为null并引发异常
System.NullReferenceException was unhandled by user code
Message="Object reference not set to an instance of an object."
要创建CustomError.aspx,我复制了Error.aspx并粘贴到我新创建的Views / Error并重命名为CustomView.aspx。
由于Error.aspx和CustomError.aspx基本相同,这是怎么回事?
修改
我创建了一个仅包含上述内容的测试项目,并且CustomError.aspx视图工作得很好 - 无论如何调试我现有的项目以找到问题?
答案 0 :(得分:2)
我刚刚在ASP.NET MVC 1.0上试过这个,我得到了正确的行为。
是否有可能在其他地方运行另一个过滤器并以某种方式更改错误?