什么是MVC中异常处理的最佳方式(Base Controller vs Custom HandleErrorAttribute)

时间:2013-03-27 09:10:13

标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 exception-handling

我正在使用三种模型在MVC中进行特殊处理。

 public class CustomHandleErrorAttribute : HandleErrorAttribute
{  
    public override void OnException(ExceptionContext filterContext)
    {
       //logging           

    }
}

 public class Base_Application : System.Web.HttpApplication
{
    protected void Application_Error(object sender, EventArgs e)
    {

        //Logging
    }
}

   public class Base_Controller : Controller
{
    protected override void OnException(ExceptionContext filterContext)
    {
        //Logging;

    }

}

如果我从代码中抛出示例异常,则CustomHandleErrorAttributeBase_Controller会抓住它。

Base_Application我正在记录异常,这是Elmah记录的。

所以我想知道所有情况下最好的方法。

1 个答案:

答案 0 :(得分:1)

如果您有基本控制器,我建议采用这种方法

public class CustomHandleErrorAttribute : HandleErrorAttribute
{  
    public override void OnException(ExceptionContext filterContext)
    {
       //logging           

    }
}

使用自定义属性

装饰基本控制器
[CustomHandleError]
public class Base_Controller : Controller
{

}

如果你添加一个以后不需要基本控制器的控制器,你也可以重用该属性。

还要通过这个精彩的article来决定是使用基本控制器还是ActionFilter。

Application_Error事件可用于捕获页面级错误处理程序未捕获的错误。