自定义动作过滤器

我们编写自定义操作过滤器有各种原因。我们可能有一个自定义操作过滤器用于记录,或者在执行任何操作之前将数据保存到数据库。我们还可以使用一个从数据库中获取数据并将其设置为应用程序的全局值。

要创建自定义操作筛选器,我们需要执行以下任务:

  1. 创建一个类
  2. 从 ActionFilterAttribute 类继承它

至少覆盖以下方法之一:

OnActionExecuting - 在执行控制器操作之前调用此方法。

OnActionExecuted - 执行控制器操作后调用此方法。

OnResultExecuting - 在执行控制器操作结果之前调用此方法。

OnResultExecuted - 在执行控制器操作结果后调用此方法。

可以创建过滤器,如下面的清单所示:

    using System;
    
    using System.Diagnostics;
    
    using System.Web.Mvc;
    
    
    
    namespace WebApplication1
    {
    
        public class MyFirstCustomFilter : ActionFilterAttribute
        {
            public override void OnResultExecuting(ResultExecutingContext filterContext)
            {
                //You may fetch data from database here 
                filterContext.Controller.ViewBag.GreetMesssage = "Hello Foo";
                base.OnResultExecuting(filterContext);
            }
    
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                var controllerName = filterContext.RouteData.Values["controller"];
                var actionName = filterContext.RouteData.Values["action"];
                var message = String.Format("{0} controller:{1} action:{2}", "onactionexecuting", controllerName, actionName);
                Debug.WriteLine(message, "Action Filter Log");
                base.OnActionExecuting(filterContext);
            }
        }
    }