原想在 MVC Action 上加一個自定義 Attribute 來做一些控制操作,最先的做法是在自定 Attribute 中定義一個屬性來做邏輯判斷,可惜事與願違,這個屬性值居然會被緩存起來,於是於此做個筆記以免後續重蹈覆轍。過濾器部分過濾器中定義了一個名稱為 count 的屬性值來初始化,並重寫... ...
原想在 MVC Action 上加一個自定義 Attribute 來做一些控制操作,最先的做法是在自定 Attribute 中定義一個屬性來做邏輯判斷,可惜事與願違,這個屬性值居然會被緩存起來,於是於此做個筆記以免後續重蹈覆轍。
過濾器部分
過濾器中定義了一個名稱為 count 的屬性值來初始化,並重寫了 OnActionExecuting 方法
讓 count 屬性進行累加的操作。
1 public class TestFilterAttribute : ActionFilterAttribute 2 { 3 public int count = 0; 4 5 public override void OnActionExecuting(ActionExecutingContext filterContext) 6 { 7 count = count + 1; 8 9 filterContext.HttpContext.Items.Add("count", count); 10 11 base.OnActionExecuting(filterContext); 12 } 13 }
控制器部分
控制器 Action 中主要是獲取並顯示過濾器中傳遞的 count 屬性,我預期的結果是 1 + 1 = 2,果然不負所望,第一次運行的結果果真是 2
但是如果再嘗試訪問該 Action 其值卻出乎預期開始了累加...
1 [TestFilter(count = 1)] 2 public ActionResult TestJson() 3 { 4 var count = (int)HttpContext.Items["count"]; 5 6 return Json(count, JsonRequestBehavior.AllowGet); 7 }
結果猜想
猜測過濾器可能作為一個單例存在於記憶體,提供給 Action 調用前訪問
到底底層是如何實現或者設計,就不去探討了,先記下筆記告誡自己。