我做了什么 ?
最初我没有写任何代码,我的异常记录在ELMAH中.
后来我决定使用MVC HandleError来处理Application Exceptions并添加过滤器
filters.Add(new HandleErrorAttribute());
现在我在过滤器中调试,看到我有2个过滤器,一个用于ELMAH HandleErrorAttribute和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);
}
只是想确保我正确的方式!
谢谢你的时间
更新:我指出错误的包更新问题.你不需要两者. 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完成了这个错误,我正在研究这个包以找出差异是什么以及如何使用它.
更新2:好的,显然Elmah.MVC软件包内置了所有内容,并且它们使用WebActivator为您注册了几乎所有内容.所以你需要在一个全新的MVC项目上做的就是开始跟踪Elmah的错误就是安装包,然后进行编译.完成.但是,您应该在安装后检查web.config,并在AppSettings下,设置查看页面所需的角色并启用身份验证.