2012-03-30 72 views
2

我有一个方法返回一个复杂的JSON对象。这是一个沉重的处理方法,我试图将其存储在缓存中,并将其保留在那里,直到对其对象进行修改。缓存不能在客户端上处理JSON响应

[HttpPost] 
[OutputCache(Duration=50, Location = OutputCacheLocation.Client, VaryByParam="none", NoStore = false)] 
     public ActionResult CacheTest() 
     { 
      //retrieves data from database 
      var data = DBContext.GetUserLog(); 

      return Json(new { userLog = data}); 
     } 

设置Location = OutputCacheLocation.ClientVaryByParam = 'none'是行不通的。如果我设置Location = OutputCacheLocation.ServerAndClient,则响应会被正确缓存。

OutputCache不在客户端存储JSON信息的任何原因?

+0

客户端存储(Cookie和本地存储)在数据容量方面受到限制。您是希望在每次请求后还是持续存在,或者只是当用户在页面上时? – Paul 2012-03-30 18:43:03

+0

这将是很好的坚持任何数量的请求后,但在有限的时间。但是,我可以管理它保持在同一页面上。 – AdrianoRR 2012-04-02 12:21:44

回答

2

IIRC POST请求未缓存在客户端上。这个动词是用来修改服务器上你没有看到的状态。如果您从服务器返回一些值而不修改状态,请使用GET。

+0

不知道。所以如果我将动词改为GET,客户端应该缓存结果的权利?我刚刚在这里做了一些测试,即使我可以看到Cache-Control从无缓存更改为private,max-age更改为200,但页面并未缓存在客户端。还有什么我应该做的? – AdrianoRR 2012-04-02 12:50:28

+0

我做了更多的测试,我可以看到,尽管'Cache-Control:max-age'没有改变,结果仍然被缓存。我不知道为什么我看不到在客户端到期之前持续多久的缓存。 – AdrianoRR 2012-04-02 13:52:01