2009-11-24 76 views
7

我有我想使用OutputCache指令緩存的頁面。但是,我正在使用URL重寫器模塊來在此頁面上定向多個URL,每個URL都有不同的內容。基於URL更改OutputCache

有什麼辦法可以使用緩存每個URL的輸出?沒有其他標準需要我改變緩存結果。

回答

10

這到底是相當簡單的修復。

  1. 將以下指令添加到需要被緩存的頁面:

    <%@輸出緩存持續時間= 「600」 位置= 「下游」 的VaryByParam = 「無」 VaryByCustom是= 「RawURL」 %>

  2. 此方法添加到Global.asax文件

    public override string GetVaryByCustomString(HttpContext context, string custom) 
    { 
        switch (custom.ToUpper()) 
        { 
         case "RAWURL": 
          return context.Request.RawUrl; 
    
         default: 
          return ""; 
        } 
    } 
    
+0

這很聰明......但它仍然返回一個200而不是304(未修改),就像使用非路由URL一樣。因此,雖然它可能不會再次生成頁面,但客戶端仍然必須重新獲取它,而不是使用本地緩存。仍然是個好問題。 – harpo 2011-04-06 06:38:00

0

以編程方式,您可以使用Response.Cache來設置緩存選項。您可以打開查詢字符串變量並根據具體情況適當地設置Response.Cache上的屬性。

MSDN on Cache object
Another helpful article from aspalliance.com

+0

我也可以改變CAC他基於請求頭,但是這些不會改變,並且沒有使用查詢字符串變量 – Blatfrig 2009-11-25 09:15:15