2013-04-26 72 views
3

我目前在vs2012上使用mvc4,并且我安装了mvc.elmah块并完成了。关于在ASP.NET MVC中使用ELAMH的说明

我做了什么?

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

后,我决定使用MVC的HandleError来处理应用程序异常,并添加过滤器

filters.Add(new HandleErrorAttribute()); 

现在我调试的过滤器,看看我有2个过滤器之一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

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

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

一来检查的事情是,你的控制器没有任何[ElmahHandleError][HandleError]属性。

5

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

你不需要两者。 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.MVC由同一作者为ELMAH完成,我期待这个一个找出差异,以及如何使用它。

UPDATE 2:好吧,显然Elmah.MVC包内置了所有这些内容,并且它们使用WebActivator为您注册几乎所有东西。因此,从字面上看,您需要在全新的MVC项目上开展跟踪错误的工作,Elmah将安装软件包并进行编译。完成。不过,您应该在安装后检查web.config,然后在AppSettings下设置查看页面所需的角色并启用身份验证。