Asp.net

防止在 Elmah 操作上應用 ASP.NET MVC 全域過濾器

  • January 29, 2015

我正在使用 Elmah 使用Alex Beletsky 的 elmah-mvc NuGet 包在我的 MVC 應用程序上記錄異常。

應用程序註冊了一些全域過濾器,應用於每個呼叫的操作。

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
   }
}
  • 我知道在執行時不能添加或刪除屬性。
  • 我想將 包裝ElmahController在一個可以添加排除過濾器的新過濾器中,但我不確定如何(如果可能)更改web.config引用此包裝器而不是原始控制器。

您可以通過自定義註冊您的全域過濾器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());

引用自:https://stackoverflow.com/questions/28193082