ASP.NET MVC:注册动作过滤器而不修改控制器

Dan*_*lis 20 c# asp.net-mvc action-filter

我正在使用nopCommerce,我需要添加我唯一的Action Filter,但是,我不想修改核心控制器以避免在发布新更新时覆盖我的代码.

我已经设置了我的动作过滤器:

public class ProductActionFilterAttribute : ActionFilterAttribute
{

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (filterContext.Result is ViewResult)
        {
            ...
        }
        base.OnActionExecuted(filterContext);
    }

}
Run Code Online (Sandbox Code Playgroud)

如果我要修改控制器,我可以添加[ProductActionFilter]到我希望它分配给的操作.

有没有办法可以在不修改控制器的情况下将自定义操作过滤器注册到特定操作?

sas*_*eve 30

我认为全局过滤器就是您所需要的.

一旦你创建了过滤器,就在global.asax中注册它:

protected void Application_Start() {

    AreaRegistration.RegisterAllAreas();

    // Register global filter
    GlobalFilters.Filters.Add(new MyActionFilterAttribute());

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes); 
}
Run Code Online (Sandbox Code Playgroud)

如果要将其应用于所有操作,请添加自定义验证逻辑以进行过滤.