原想在 MVC Action 上加一个自定义 Attribute 来做一些控制操作,最先的做法是在自定 Attribute 中定义一个属性来做逻辑判断,可惜事与愿违,这个属性值居然会被缓存起来,于是于此做个笔记以免后续重蹈覆辙。

过滤器部分

过滤器中定义了一个名称为 count 的属性值来初始化,并重写了 OnActionExecuting 方法

让 count 属性进行累加的操作。

 public class TestFilterAttribute : ActionFilterAttribute
 {
     public int count = 0;

     public override void OnActionExecuting(ActionExecutingContext filterContext)
     {
         count = count + 1;

         filterContext.HttpContext.Items.Add("count", count);

         base.OnActionExecuting(filterContext);
     }
 }

控制器部分

控制器 Action 中主要是获取并显示过滤器中传递的 count 属性,我预期的结果是 1 + 1 = 2,果然不负所望,第一次运行的结果果真是 2

但是如果再尝试访问该 Action 其值却出乎预期开始了累加...

 [TestFilter(count = 1)]
 public ActionResult TestJson()
 {
     var count = (int)HttpContext.Items["count"];

     return Json(count, JsonRequestBehavior.AllowGet);
 }

结果猜想

猜测过滤器可能作为一个单例存在于内存,提供给 Action 调用前访问

到底底层是如何实现或者设计,就不去探讨了,先记下笔记告诫自己。

自行验证

没找出个所以然,心里还是有些阻塞

故而去看了下 IL 代码,结果一目了然

再者,Attribute 在编译时就已经被实例化

(所以我们可以通过 Attribute.GetCustomAttribute(typeof(Class), typeof(Attribute)) 在未实例化类时获取 Attribute 信息)

不像其它类运行时实例化,上图 IL 也清晰给出了说明

最新文章

  1. OpenGL帧缓存对象(FBO:Frame Buffer Object)(转载)
  2. Linux ip
  3. UVa 221城市正视图(离散化)
  4. MySQL开启慢查询 总结
  5. [KOJ6024]合并果子·改(强化版)
  6. ajaxsearch要点1
  7. jquery 字符串转dom对象及对该对象使用选择器查询
  8. [BZOJ 2186][Sdoi2008]沙拉公主的困惑(欧拉函数)
  9. PhpStorm Git 配置
  10. wikioi 1012最大公约数和最小公倍数【根据最大公约数和最小公倍数求原来的两个数a、b】
  11. jquery页面滑到底部加载更多
  12. Codeforces#363 Div2
  13. 【一天一道LeetCode】#89. Gray Code
  14. kubernetes---kubectl 管理集群资源
  15. Git入门——本地版本库操作
  16. 微软Power BI 每月功能更新系列——7月Power BI 新功能学习
  17. android apk 反编译过程
  18. SPOJ 8222 NSUBSTR - Substrings
  19. 如何高效的学习 TensorFlow 代码? 以及TensorFlow相关的论文
  20. JVM伪共享

热门文章

  1. 【BZOJ 1016】 [JSOI2008]最小生成树计数(matrix-tree定理做法)
  2. 【BZOJ 1029】[JSOI2007]建筑抢修
  3. SQL基础问题整理
  4. Android Studio运行main方法
  5. 同一性(identical)
  6. LR杂记 - Linux的系统监控工具vmstat详细说明
  7. PS 滤镜算法— — 表面模糊
  8. OVS 派OFPT_PORT_STATUS 流程
  9. hdu1845 Jimmy’s Assignment --- 完整匹配
  10. 浅谈java枚举类