2013-02-24 27 views
0

有一種使用ASP.NET的輸出緩存的頁面兩種方式:輸出緩存爲兩個參數,自定義和編碼

  1. VaryByContentEncoding - 無論是瀏覽器支持gzip或不
  2. 通過定製PARAM,在我的國家,我從使用HttpContext.Current.Request.UserLanguages;並從我的函數返回的文化中獲取TwoLetterISORegionName。

對於一些國家我返回相同的頁面,但稍作修改,但我仍然希望這些緩存分開,以便來自不同國家的訪問者看到不同的社交按鈕。當然,對gzip的支持是非常重要的,因爲如果瀏覽器支持gzip壓縮,我會使用gzip呈現js和css標籤。

更新:我想過使用varybycontrol,並把該國+ gzip的狀態(0或1),兩者成字符串,並將其寫入到一個隱藏字段,不是告訴.NET來varybycontrol和合格的ID隱藏的現場控制。雖然我不確定這種方法。

謝謝。

回答

1

當使用VaryByCustom進行緩存時,您可以訪問整個Request對象,並且可以從那裏獲取標題並根據您的要求創建您自己的緩存鍵。

public override string GetVaryByCustomString(HttpContext context, string arg) 
{ 
    // Do something with Request.Headers["Accept-Encoding"] (like checking if gzip is preferred...) 
    return "custom-encoding-key"; 
} 
+0

語言和GZIP支持檢查在pageLoad函數中,有沒有從那裏控制輸出緩存的選項? – 2013-02-24 06:38:27

+0

您需要將其移至此函數內(它將在每個請求中執行)。另外,在執行OutputCaching時,PageLoad事件根本不應該被執行。 – Allov 2013-02-24 06:44:57