【MVC 笔记】MVC 自定义 Attribute 属性中的猫腻
2024-08-31 14:03:38
原想在 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 也清晰给出了说明
最新文章
- OpenGL帧缓存对象(FBO:Frame Buffer Object)(转载)
- Linux ip
- UVa 221城市正视图(离散化)
- MySQL开启慢查询 总结
- [KOJ6024]合并果子·改(强化版)
- ajaxsearch要点1
- jquery 字符串转dom对象及对该对象使用选择器查询
- [BZOJ 2186][Sdoi2008]沙拉公主的困惑(欧拉函数)
- PhpStorm Git 配置
- wikioi 1012最大公约数和最小公倍数【根据最大公约数和最小公倍数求原来的两个数a、b】
- jquery页面滑到底部加载更多
- Codeforces#363 Div2
- 【一天一道LeetCode】#89. Gray Code
- kubernetes---kubectl 管理集群资源
- Git入门——本地版本库操作
- 微软Power BI 每月功能更新系列——7月Power BI 新功能学习
- android apk 反编译过程
- SPOJ 8222 NSUBSTR - Substrings
- 如何高效的学习 TensorFlow 代码? 以及TensorFlow相关的论文
- JVM伪共享