xle*_*ier 9 asp.net asp.net-mvc elmah action-filter
我正在使用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
}
}
Run Code Online (Sandbox Code Playgroud)
我知道在运行时无法添加或删除属性.
我想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
}
}
Run Code Online (Sandbox Code Playgroud)
而在你Application_Start而不是打电话:
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
Run Code Online (Sandbox Code Playgroud)
你会打电话给:
FilterProviders.Providers.Add(new MyFilterProvider());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1190 次 |
| 最近记录: |