• MVC四大筛选器—ActionFilter&ResultedFilter


    ActionFilter筛选器

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

     

    因此自定义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筛选器最典型的应用就是页面静态化,我们以后在其他文章中在对此进行详细讲解

  • 相关阅读:
    大爽Python入门教程 0-2 什么是IDE?python选什么IDE好?
    大爽Python入门教程 0-3 安装Atom与配置Python环境
    大爽Python入门教程 0-1 安装python
    HBase 过滤器 及shell 操作过滤器
    分布式ID生成方式(雪花算法)
    tidb 踩坑经验(转载)
    MYSQL ACID
    kafka什么时候会丢消息
    java 单例模式模式实现
    使用 GitHub 的十个最佳实践
  • 原文地址:https://www.cnblogs.com/oneheart/p/4131118.html
Copyright © 2020-2023  润新知