我有一個關於在任一ASP.Net或複合C1 CMS的輸出緩存的工作(不知道哪來的問題)以下問題:重寫GetVaryByCustomString方法被調用僅在第一次請求一個頁面
我需要改變通過名爲「城市」的cookie進行緩存。在Global.asax中,我重寫了GetVaryByCustomString方法。
public override string GetVaryByCustomString(HttpContext context, string custom)
{
var result = ApplicationLevelEventHandlers.GetVaryByCustomString(context, custom);
if (result == null) {
return base.GetVaryByCustomString(context, custom);
}
HttpCookie cookie = context.Request.Cookies["City"];
string additionalVary = "";
if (cookie != null)
additionalVary = cookie.Value;
else
additionalVary = "Москва";
return String.Concat(result, additionalVary);
}
而問題是:我重寫GetVaryByCustomString方法的斷點被擊中僅在第一次請求一個頁面,但旁邊的請求沒有被打,直到緩存已經到期(60秒在我案件)。 雖然cookie可能在60秒內在客戶端發生了變化 - 該頁面僅從緩存中獲取。
我在哪裏錯了? 在此先感謝。
UPDATE: 我終於能夠使輸出緩存由餅乾改變由以下修改的CacheProfile設置:
<outputCacheProfiles>
<add name="C1Page" duration="60" varyByCustom="C1Page" varyByParam="*" varyByHeader="Cookie" location="Server" />
</outputCacheProfiles>
在這種情況下,方法GetVaryByCustomString被打在每個請求,但有不需要它:這些設置使緩存因網站上可能設置的每個cookie而異。當然,這不是一個理想的行爲 - 這就是爲什麼我繼續調查。
更有趣的是 - 這兩個參數(varyByHeader =「Cookie」和位置=「服務器」)只能一起工作,禁用其中一個使事情看起來和以前完全一樣 - outputcache沒有變化。
在EndRequest中試過 - 每個請求都會觸發斷點。 – user2138889 2013-03-07 10:53:49
查看問題中的更新。 – user2138889 2013-03-07 11:47:11