簡體   English   中英

在這種情況下如何使用outputcache?

[英]How can I use outputcache at this situation?

在我的應用程序中,我將記住用戶在會話中的語言選擇。 問題是如果我使用輸出緩存,那么更改語言功能將不起作用,因為它根據Session [“lang”]值從數據庫檢索時緩存結果。

那么如果我有另一種方法來使用緩存功能呢? 或者我怎樣才能減少響應時間?

輸出緩存基礎結構的一部分是VaryBy機制,它是一種指示ASP.NET保持同一頁面的並行緩存由某些數據(如查詢字符串)改變的方式。 在這種情況下,VaryByCustom機制可能是最簡單的實現。 這是一篇簡短的文章,有一個很好的例子。

首先,緩存屬性:

[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將保留在該參數下執行的頁面的緩存副本。

將此值保存在cookie中,會話在GetVaryByCustomString中不可用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM