澄清在ASP.NET MVC中使用ELAMH

时间:2013-04-26 12:42:44

标签: asp.net-mvc elmah

目前正在使用mvc4和vs2012,我安装了mvc.elmah nugget并完成了。

我做了什么?

最初我没有写任何代码,我的异常记录在ELMAH中。

后来我决定使用MVC HandleError来处理Application Exceptions并添加了过滤器

  filters.Add(new HandleErrorAttribute());

现在我在过滤器中进行了调试,看到我有两个过滤器,用于ELMAH HandleErrorAttribute and MVC HandleErrorAttribute !

我看到了这个优秀的链接https://stackoverflow.com/a/5936867/1481690,它谈到了使用ErrorSignal来处理应用程序异常

但是我没有使用ErrorSignal,但我的例外情况仍被ELMAH捕获?

如果我使用

if (context.ExceptionHandled)
            ErrorSignal.FromCurrentContext().Raise(context.Exception);

我的例外会被记录两次。

我的问题如下

  • 我是否需要使用2个过滤器(ELMAH和MVC)?
  • 如果ELMAH已经拥有HandleErrorAttribute并记录异常。我是否需要添加MVC HandleErrorAttribute?

目前正在做什么

添加过滤器

filters.Add(new HandleErrorAttribute());

和覆盖(将来处理Ajax错误)

public class HandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute
    {
        public override void OnException(ExceptionContext context)
        {
 base.OnException(context);
}

这是否足够或良好做法是什么?我没有提高ErrorSignal,因为它记录了两次。

我没有使用任何try.catch作为使用下面的行,并希望我的例外处理。

base.OnException(context);

}

只是想确保我正确的方式!

感谢您的时间

2 个答案:

答案 0 :(得分:5)

更新:我指出错误的包更新问题。

你不需要两者。 ElmahHandleErrorAttribute继承自HandleErrorAttribute,因此使用两者都是多余的。

How to get ELMAH to work with ASP.NET MVC [HandleError] attribute?

你也不需要为Elmah提出任何信号,ElmahHandleErrorAttribute处理这个信号。

如果您正在使用Nuget中的Elmah.Contrib.MVC,则只需ElmahHandleErrorAttribute

filters.Add(new Elmah.Contrib.MVC.ElmahHandleErrorAttribute());

那里还有一个包裹,我在同一位作者Elmah所做的Elmah.MVC误认为这个包,我正在调查这个包以找出差异是什么,如何使用它。

UPDATE 2 :好的,显然Elmah.MVC包内置了所有内容,并且他们使用WebActivator为您注册了几乎所有内容。所以你需要在一个全新的MVC项目上做的就是开始跟踪Elmah的错误就是安装包,然后进行编译。完成。但是,您应该在安装后检查web.config,并在AppSettings下,设置查看页面所需的角色并启用身份验证。

答案 1 :(得分:2)

我相信你拥有它的方式是正确的。这是在我的Global.asax.cs

    private static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new ElmahHandleErrorAttribute());
        filters.Add(new HandleErrorAttribute());
    }

要检查的一件事是您的控制器没有[ElmahHandleError][HandleError]属性。