在我的應用程序中,我會記住用戶在會話中的語言選擇。 問題是如果我使用輸出緩存,那麼更改語言函數將不起作用,因爲它根據Session [「lang」]值從數據庫檢索時緩存結果。如何在這種情況下使用outputcache?
那麼如果我有另一種方法來使用緩存功能?或者我怎樣才能縮短響應時間?
在我的應用程序中,我會記住用戶在會話中的語言選擇。 問題是如果我使用輸出緩存,那麼更改語言函數將不起作用,因爲它根據Session [「lang」]值從數據庫檢索時緩存結果。如何在這種情況下使用outputcache?
那麼如果我有另一種方法來使用緩存功能?或者我怎樣才能縮短響應時間?
輸出緩存基礎結構的一部分是VaryBy機制,它是一種指示ASP.NET保持同一頁面的並行緩存根據查詢字符串等某些數據而變化的方式。在這種情況下,VaryByCustom機制可能是最簡單的實現。 Here's a short article with a good example.
首先,緩存屬性:
[OutputCache(CacheProfile = "CachedPage")]
public ActionResult Index()
{
return View();
}
緩存配置文件:
<caching>
<outputcachesettings>
<outputcacheprofiles>
<add varybycustom="Language"
varybyparam="*"
duration="86400"
name="CachedPage" />
</outputcacheprofiles>
</outputcachesettings>
</caching>
最後,在Global.asax.cs中的定製邏輯:
public override string GetVaryByCustomString(
HttpContext context,
string arg)
{
if (arg == "Language")
{
return Session["lang"].ToString();
}
else
{
return base.GetVaryByCustomString(context, arg);
}
}
現在對於Session["lang"]
返回的每個可能的唯一值,ASP.NET將保留一個緩存的c opy在該參數下執行的頁面。
保存在cookie中這個值,會話中未提供GetVaryByCustomString
這應該是評論。 – 2017-11-10 08:49:18
我以前讀這樣的事情,但似乎不起作用,它始終緩存的結果。 – MemoryLeak 2010-11-12 03:32:29
@MemoryLeak正確實施我向你保證它工作得很好。 – 2010-11-12 03:46:57
我發現Context.Session爲null,它不應該是null!這是怎麼回事 ? – MemoryLeak 2010-11-12 03:47:57