2014-02-26 42 views
2

當我使用自定義緩存(VarByCustom)時,有什麼辦法可以有多個緩存頁面嗎?如何擁有ASP.Net Webforms的多個緩存版本?

對於例如,如果我實現一個緩存自定義變量瀏覽器老虎鉗,我會在全球實現功能如下

public override string GetVaryByCustomString(HttpContext context, string custom) 
{ 
    if (custom == Request.Browser.Version) 
    { 
     return Request.Browser.Version; 
    } 
    else 
    { 
     return base.GetVaryByCustomString(context, custom); 
    } 

} 

內部控制

[PartialCaching(500000)] 
public partial class WebUserControl : System.Web.UI.UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     this.CachePolicy.Duration = new TimeSpan(0,5,0); 
     this.CachePolicy.Cached = true; 
     this.CachePolicy.SetVaryByCustom(Request.Browser.Version); 

     lblDate.Text = DateTime.Now.ToShortDateString(); 
     lblTime.Text = DateTime.Now.ToLongTimeString(); 
    } 

} 

在這種情況下,我想有多個緩存關於以下情形的頁面;

  1. 在Firefox〜頁打開頁面緩存和相同的Firefox瀏覽器返回到瀏覽器
  2. 打開同一個頁面〜緩存的頁面被作爲響應
  3. 打開同一個頁面上的Chrome〜頁面緩存和回報因爲瀏覽器是不同的瀏覽器。在Chrome瀏覽器
  4. 打開同一個頁面〜緩存的頁面再次發送的響應

  5. 打開同一個頁面上的Firefox〜由於頁面緩存瀏覽器,這將標識爲一個變化,它會爲Firefox再次緩存,但在這種情況下,我希望在第一步中爲Firefox緩存頁面,而不是再次緩存。

回答

0

這是溶液,我發現

在控制器I通過由與分隔條件瀏覽器合併控制器名稱;

[PartialCaching(1000)] 
public partial class WebUserControl : System.Web.UI.UserControl 
{ 
    protected override void OnInit(EventArgs e) 
    { 
     this.CachePolicy.Duration = new TimeSpan(0,5,0); 
     this.CachePolicy.Cached = true; 
     this.CachePolicy.SetVaryByCustom("browser"+";"+this.ID); 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     lblDate.Text = DateTime.Now.ToShortDateString(); 
     lblTime.Text = DateTime.Now.ToLongTimeString(); 
    } 

} 

在全局文件,用戶控件的名稱和瀏覽器字符串分割

public override string GetVaryByCustomString(HttpContext context, string custom) 
{ 
    string[] array    = custom.Split(';'); 
    string controllerName  = array[1]; 

    if (array[0] == "browser") 
    { 



     return HttpContext.Current.Request.UserLanguages[0]+controllerName; 

    } 
    else 
    { 
     return base.GetVaryByCustomString(context, custom); 
    } 

} 
1

您是在5點。

按的方式VarByCustom="Browser"作品不正確這裏,沒有爲不同的瀏覽器在同一頁的一個單獨的緩存版本。這意味着第一次爲Chrome瀏覽器緩存頁面時,它不會銷燬緩存的Firefox或任何其他瀏覽器(如果存在的話)的版本。

因此,當用戶從Chrome發出請求時,會爲Chrome瀏覽器創建一個單獨的緩存副本(僅當它尚未存在時),Firefox的緩存版本仍會存在。

在任何下一刻,請求都來自Firefox,Firefox瀏覽器的緩存版本作爲響應發送。

注意::默認情況下使用VarByCustom="Browser"也考慮您正在使用的瀏覽器的主要版本。

+0

我在以前的職位抱歉,我已經包括錯誤的代碼塊,我在這裏沒有使用瀏覽器,而不是我有我的自己的變量。它可以是瀏覽器語言或版本。在這種情況下,就像上述步驟一樣 –

相關問題