【问题标题】:Clarification on using ELAMH in ASP.NET MVC关于在 ASP.NET MVC 中使用 ELAMH 的说明
【发布时间】:2013-04-20 15:32:30
【问题描述】:

我目前正在使用带有 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);

}

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

感谢您的时间

【问题讨论】:

    标签: asp.net-mvc elmah


    【解决方案1】:

    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 相同的作者完成的,我正在研究这个包,以了解它们之间的区别以及如何使用它。

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-23
        • 2013-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-19
        相关资源
        最近更新 更多