3

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

我做了什么 ?

最初我没有编写任何代码,我的异常记录在 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);

}

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

谢谢你的时间

4

2 回答 2

5

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

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

如何让 ELMAH 与 ASP.NET MVC [HandleError] 属性一起使用?

你也不需要为 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 下设置查看页面所需的角色并启用身份验证。

于 2013-04-26T15:53:15.857 回答
2

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

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

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

于 2013-04-26T15:40:45.377 回答