从内部操作方法catch块执行ErrorFilter

时间:2012-05-10 20:26:39

标签: asp.net-mvc-3 asp.net-mvc-filters

我使用全局ErrorHandler过滤器来记录未处理的异常,但我也希望能够使用相同的处理程序来记录catch块中的处理异常。

我想访问全局过滤器并按配置执行ErrorHandler,但我在执行此操作时遇到了一些困难。我尝试了以下内容,但Resharper告诉我过滤器不能成为我的ErrorLogFilter。

foreach (var filter in GlobalFilters.Filters)
{
    if (filter is ErrorLogFilter) // Static analysis tells me this can never be an ErrorLogFilter
    {
        // want to execute the filter
    }
}

将ErrorLogFilter添加到全局过滤器中,如下所示:

GlobalFilters.Filters.Add(new ErrorLogFilter(provider));

ErrorLogFilter(作为Elfar的一部分,类似于Elmah,但对于MVC)定义为:

public class ErrorLogFilter : FilterAttribute, IExceptionFilter

有关如何完成此任务的任何建议?

1 个答案:

答案 0 :(得分:1)

GlobalFilters.FiltersGlobalFilterCollection,其中包含Filter个,它们是添加的IMvcFilter周围的包装。

请改为尝试:

foreach (var filter in GlobalFilters.Filters)
{
    if (filter.Instance is ErrorLogFilter)
    {
        // want to execute the filter
    }
}

所以Resrper是正确的,表示ErrorLogFilter中没有GlobalFilters.Filters