mvc4中有一個標記屬性OutputCache,用來對ActionResult結果進行緩存,如何理解呢?概括地說,就是當你的請求參數沒有發生變化時,直接從緩存中取結果,不會再走服務端的Action代碼了.
1.[OutputCache(Duration=300)]
//事例代碼:
[OutputCache(Duration = 300)] public ActionResult Index(int? id,string name) { var person = new Person { ID = Convert.ToInt16(id), Name = name, City="Beijing"}; return View(person); }
請求此Action的url可以為: person/Index?id=100&name="bird",
當第一次請求這個地址時,會執行Index方法,並把結果緩存起來,且過期時間為300秒
接下來,如果不改變id和name參數的前提下,在距離上次請求300秒 內,再來請求這個地址,不會執行Index方法,直接從緩存中拿結果.
當id或者name的參數值發生變化時,發送請求時,會執行index方法,然后再緩存此結果.
[Output(Duration=300)],這種方法沒有指明具體針對哪個參數來緩存,所以默認是針對所有參數,即任何一個參數值發生變化,都會緩存一份.
那么,如果,我想指定具體的參數,進行緩存該如何做呢?請看下一個方案
2.[OutputCache(Duration = 300,VaryByParam="id")]
此種方式,指明了緩存是針對哪個參數來做的,即只有當id參數值發生變化的時候,才做緩存,其他機制同第一種.
3.對於參數中的緩存時間設置,可以在配置文件中進行配置.
<caching> <outputCacheSettings> <outputCacheProfiles> <add name="long" duration="50"/> <add name="Short" duration="10"/> </outputCacheProfiles> </outputCacheSettings> </caching>
使用:
[OutputCache(CacheProfile="Short", VaryByParam = "id")] public ActionResult Index(int? id, string name) { var person = new Person { ID = Convert.ToInt16(id), Name = name, City = "Beijing" }; return View(person); }
如此,便於維護和更改.