目前正在使用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);
我的例外会被记录两次。
我的问题如下
目前正在做什么
添加过滤器
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);
}
只是想确保我正确的方式!
感谢您的时间
答案 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]
属性。