在MVC5中自动调用动作过滤器

时间:2015-11-26 08:22:02

标签: c# asp.net-mvc-5 action-filter

我正在尝试为nopcommerce开发一个插件,并尝试在动作过滤器中捕获页面模型(提交后),以便我可以对模型属性进行一些更改。

    public ActionResult Index()
    {
        Data dt = new Data();

        dt.id = 54;
        dt.name = "something";
        return View(dt);
    }

这是契约者:

public class ModelChangerAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            Data dt = new Data();
            dt = (Data) filterContext.Controller.ViewData.Model;
            dt.id++;
            dt.name += " someotherthing";

            filterContext.HttpContext.Items["dt"] = dt;
        }

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            //throw new NotImplementedException();
        }
    }

但是要运行动作过滤器,我需要在控制器中的方法之前指定它。而且我不会那么失望。

不想这样做:

        [ModelChangerAttribute]
        public ActionResult Index()
        {
            ...

每次运行控制器方法时都可以自动调用过滤器吗?

请举例 HERE

1 个答案:

答案 0 :(得分:4)

在App_Start / FilterConfig.cs中:

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new ModelChangerAttribute());
    }
}

其他信息:您应该在Application_Start()中的global.asax中调用它:

FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);