2017-04-13 22 views
3

我想緩存動作的返回數據。爲此我使用OutPutCacheAttribute。這裏是我的客戶端代碼:OutputCache不起作用

$(document).ready(function() { 
    $.get('@Url.Action("GetMenu", "Home")', null, 
     function(data) { 
      parseMenu(data);     
    }); 
} 

這裏是我的服務器代碼:

[HttpGet] 
[OutputCache(Duration = 86400, Location = OutputCacheLocation.Server)] 
public ContentResult GetMenu() 
{ 
    string jsonText = GetData(); //some code 
    return new ContentResult 
    { 
     Content = jsonText, 
     ContentType = "text/json" 
    }; 
} 

正如你可以看到我使用OutputCacheAttribute緩存服務器響應。但它不起作用。每次加載頁面時,都會調用Home/GetMenu行動。即使直接在瀏覽器的地址欄中輸入'localhost/Home/GetMenu',也會被調用。我在哪裏弄錯了?

UPD我創建了第二個動作來測試此屬性而不進行調試。下面是它的代碼:

[HttpGet] 
[OutputCache(Duration = 86400, Location = OutputCacheLocation.ServerAndClient, VaryByParam = "none")] 
public JsonResult GetJson() 
{ 
    return Json(new 
    { 
     random = new Random().Next(100) 
    }, 
    JsonRequestBehavior.AllowGet); 
} 

我認爲,如果屬性的OutputCache工作正常(我用它正確),那麼動作被調用一次,每次都遇到同樣的反應。但是,如果沒有,那麼我每次都會得到不同的答案,因爲每次都會產生隨機數。 當我叫這個動作有些時候我總是收到不同respnses,如{"random":36}{"random":84}

+0

有你解決了這個@Pupkin?我想知道原因是什麼。 –

+0

@TorbjörnHansson傷心,但我還沒有解決這個問題 – Pupkin

回答

0

請試試這個

[OutputCache(Duration = 86400, Location = OutputCacheLocation.ServerAndClient,VaryByParam = "none")] 

如果不工作,請嘗試:

 [HttpGet] 
    [OutputCache(Duration = 86400, Location = OutputCacheLocation.ServerAndClient, VaryByParam = "none")] 
    public JsonResult GetJson() 
    { 
     return Json(new{message = "Record created successfully!!!"},JsonRequestBehavior.AllowGet); 
    } 

NB :更多關於的信息Outputcache

+0

不幸的是它不工作( – Pupkin

+0

第二種方法沒有效果(( – Pupkin

1

在其默認實現中,輸出緩存是進程綁定的並存儲在內存中。因此,如果您執行諸如停止並開始調試之類的操作,則會破壞以前緩存的任何內容。實際上,更準確地說,你已經殺死了進程並開始了一個新進程,並且由於緩存是進程綁定的,因此它會隨着舊進程而消失。

+0

我認爲這不是真正的原因),我添加了以下行到我的代碼:'jsonText = jsonText.Insert(2,string.Format(「\」param \「:\」{0} \「,」,new Random()。Next(100)));'每次我調用這個動作)我得到了不同的響應,因此我的操作每次都執行,CacheOutputAttribute仍然不起作用 – Pupkin