使用Elmah使用IExceptionFilter捕获未处理的异常

时间:2013-06-10 19:01:57

标签: c# asp.net elmah

我正在尝试将我为MVC找到的一些代码转换为在常规Asp.Net中工作。简而言之,我希望能够使用Elmah记录处理的异常,而不必在每次发生异常时调用记录方法。我一直在寻找这个以及我发现使用MVC的所有解决方案。我在这里找到了一个简单而优雅的版本,即使我的应用程序使用MVC进行客户端调用,它也不是一个完整的MVC项目,所以我想它不会起作用或者我错过了什么。

所以这是代码

public class ElmahHandledErrorLoggerFilter : IExceptionFilter
{
    public void OnException (ExceptionContext context)
    {
        // Log only handled exceptions, because all other will be caught by ELMAH anyway.
        if (context.ExceptionHandled)
            ErrorSignal.FromCurrentContext().Raise(context.Exception);
    }
}

public static void RegisterGlobalFilters (GlobalFilterCollection filters)
{
    filters.Add(new ElmahHandledErrorLoggerFilter());
    filters.Add(new HandleErrorAttribute());
}

帖子来自: How to get ELMAH to work with ASP.NET MVC [HandleError] attribute?

说将第二个代码块放在global.asax文件中。这个事件永远不会被我召唤所以我想知道我是否必须自己打电话,如果我这样做,那么我传递给它的是什么?我更喜欢知道常规asp网的等价物是什么,因为我不熟悉MVC,虽然因为我有一个MVC dll的参考,我会愿意让它工作'就像'如果有人有想法。

1 个答案:

答案 0 :(得分:0)

由于常规ASP.NET具有用于加载页面的不同管道,因此过滤器不会应用于这些页面请求。但是,它将针对MVC特定路由执行,并且您找到的解决方案确实是最好的。还有一些具有相同实现的NuGet包。

标准的ELMAH包应该已经捕获了所有未处理的异常,也适用于ASP.NET Forms应用程序。我建议您按照标准文档进行设置。

相关问题