asp.net - 防止在 Elmah 操作上应用 ASP.NET MVC 全局过滤器

标签 asp.net asp.net-mvc elmah action-filter

我正在使用 Elmah 在我的 MVC 应用程序上使用 Alex Beletsky's elmah-mvc 记录异常NuGet 包。

应用程序注册了一些全局过滤器,应用于每个调用的操作。

有没有办法在调用 Elmah.Mvc.ElmahController 时阻止应用其中一些过滤器?错误日志页面 (foo.com/elmah) ?

当然,像下面这样的测试可以工作,但我正在寻找一种更优雅的方式,它不涉及修改过滤器(也不涉及 Elmah/Elmah MVC 的源代码)。甚至可能吗?

public class FooAttribute : FilterAttribute, IActionFilter
{
    // ...

    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (filterContext.Controller is ElmahController)
        {
            return;
        }

        // do stuff
    }
}
  • 我知道属性can't be added or removed at runtime .
  • 我想包装 ElmahController在一个新的地方,我可以添加一个排除过滤器,但我不确定如何(如果可能)更改 web.config引用此包装器而不是原始 Controller 。
  • 最佳答案

    您可以通过自定义 IFilterProvider 注册您的全局过滤器。 :

    public class MyFilterProvider : IFilterProvider
    {
        public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
        {
            if (controllerContext.Controller is ElmahController)
            {
                return Enumerable.Empty<Filter>();
            }
    
            return ... the collection of your global filters
        }
    }
    

    在你的Application_Start而不是调用:
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    

    你会调用:
    FilterProviders.Providers.Add(new MyFilterProvider());
    

    关于asp.net - 防止在 Elmah 操作上应用 ASP.NET MVC 全局过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28193082/

    相关文章:

    c# - 从 ComboBox 中检索 DataSource 的内容

    asp.net - Asp.NET MVC View 中的引号

    asp.net - N 层环境中的 Elmah

    asp.net-mvc - ELMAH - 使用自定义错误页面收集用户反馈

    c# - 在异常期间捕获原始 HTTP POST 数据

    c# - 我得到 "missing a using directive or assembly reference"并且不知道出了什么问题

    asp.net - 如何引用 GAC 中的程序集

    asp.net-mvc - 如何在 ASP.NET MVC 中向用户提供操作 "success"反馈?

    asp.net-mvc - 使用 Linux 容器将 ASP.NET MVC 托管/部署到 docker

    javascript - 隐藏 javascript 填充表中的列