通过动作过滤器属性处理ASP.Net MVC自定义错误

时间:2009-12-30 19:05:21

标签: asp.net-mvc error-handling actionfilterattribute

我正在尝试通过动作过滤器属性实现自定义错误处理。

我的代码如下:

[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视图工作得很好 - 无论如何调试我现有的项目以找到问题?

1 个答案:

答案 0 :(得分:2)

我刚刚在ASP.NET MVC 1.0上试过这个,我得到了正确的行为。

是否有可能在其他地方运行另一个过滤器并以某种方式更改错误?