清除方法来捕获MVC 3.0应用程序中抛出的所有错误?

时间:2012-01-03 11:58:48

标签: asp.net-mvc model-view-controller error-handling

我正在构建一个MVC 3.0电子商务网站。我想避免在我的代码中粘贴try-catch块。

问题很简单 - 捕获网站上所有错误的好策略是什么?我想知道所有这些......所以我可以在网站上线后将这个数量计算为0。我计划将每个错误写入记录器并发送电子邮件。

我已经完成了关于在global.asax文件中捕获它的一些阅读...但我也读过它没有得到所有这些。

任何人都有任何建议或能指出我的方向吗?

2 个答案:

答案 0 :(得分:24)

解决该问题的MVC方式是过滤器。如果您已经使用MVC3,则全局过滤器适合您。处理错误的过滤器有特殊类型:HandleError过滤器。 This article描述了很多使用它。

您可以实现自己的过滤器并控制未处理异常的每个方面,例如:

public class HandleExceptionsAttribute : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        var expception = filterContext.Exception;

        // custom code here..
    }
}

最后,如果您想要存储和记录所有未处理的异常,ELMAH即ELMAH.MVC是最佳选择。使用NuGet package安装它,配置它,所有数据都将从以下链接访问:

  

http://yourapp/admin/elmah/

我的建议是在Global.asax.cs中使用Application_Error之类的内容。

答案 1 :(得分:2)

您可以在Global.asax中处理任何抛出的异常。

protected void Application_Error(object sender, EventArgs e) 
{
  Exception exception = Server.GetLastError();
  // global handling code goes here

  Server.ClearError();
}