MVC四大筛选器—ActionFilter&ResultedFilter

ActionFilter筛选器

ActionFilter筛选器是在Action方法执行前后会触发,主要用于在Action执行前后处理一些相应的逻辑。ActionFilter的筛选器都继承于ActionFilterAttribute抽象类,而它实现了IActionFilter、IResultFilter和FilterAttribute类,结构如下

 MVC四大筛选器—ActionFilter&ResultedFilter

因此自定义ActionFilter筛选器只要继承ActionFilterAttribute,实现其中的方法即可。

我们来举一个简单的例子,获取Action方法的执行时长,代码如下

public class DefaultController : Controller

    {

        [ActionExecTimeSpan]

        public ActionResult DoWork()

        {

            return View();

        }

    }



public class ActionExecTimeSpanAttribute : ActionFilterAttribute

    {

        private const string executeActionTimeKey = "ActionExecBegin";



        public override void OnActionExecuting(ActionExecutingContext filterContext)

        {

            base.OnActionExecuting(filterContext);

            //记录开始执行时间

            filterContext.HttpContext.Items[executeActionTimeKey] = DateTime.Now;

        }



        public override void OnActionExecuted(ActionExecutedContext filterContext)

        {

            //计算执行时间,并记录日志

            if (filterContext.HttpContext.Items.Contains(executeActionTimeKey))

            {

                DateTime endTime = DateTime.Now;

                DateTime beginTime = Convert.ToDateTime(filterContext.HttpContext.Items[executeActionTimeKey]);

                TimeSpan span = endTime - beginTime;

                double execTimeSpan = span.TotalMilliseconds;

                log.Info(execTimeSpan + "毫秒");

            }

            //

            base.OnActionExecuted(filterContext);

        }

    }

 

ResultFilter筛选器

ResultFilter筛选器是对Action方法返回的Result结果进行执行时触发的。它也分执行前和执行后两个段执行

所有的ResultFilter都实现了IResultFilter接口和FilterAttribute类,看一下接口定义

    public interface IResultFilter

    {

        void OnResultExecuting(ResultExecutingContext filterContext);



        void OnResultExecuted(ResultExecutedContext filterContext);

    }
其中OnResultExecuting和OnResultExecuted方法分别是在Result执行前、后(页面展示内容生成前、后)触发。
使用ResultFilter筛选器最典型的应用就是页面静态化,我们以后在其他文章中在对此进行详细讲解

你可能感兴趣的:(filter)