2013-03-06 65 views
1

我有一個關於在任一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沒有變化。

回答

0

試着把一個斷點放到Application_BeginRequest,它可能是瀏覽器沒有提出請求,而是顯示一個緩存頁面。

+0

在EndRequest中試過 - 每個請求都會觸發斷點。 – user2138889 2013-03-07 10:53:49

+0

查看問題中的更新。 – user2138889 2013-03-07 11:47:11

相關問題