【问题标题】:OutputCache doesn't work输出缓存不起作用
【发布时间】:2017-04-13 12:45:07
【问题描述】:

我想缓存一个动作的返回数据。为此,我使用OutPutCacheAttribute。这是我的客户端代码:

$(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 属性正常工作(并且我正确使用它),那么会调用一次操作,并且每次都会得到相同的响应。但如果不是,那么我每次都会得到不同的响应,因为每次都会生成随机数。 而当我调用这个动作时,我总是收到不同的响应,例如{"random":36}、{"random":84}等等

【问题讨论】:

  • 你解决了这个@Pupkin 吗?我想知道是什么原因。
  • @TorbjörnHansson 很难过,但我还没有解决这个问题
  • 可能是你的输出有 cookie stackoverflow.com/questions/20027813/…

标签: c# asp.net-mvc caching


【解决方案1】:

在其默认实现中,输出缓存受进程限制并存储在内存中。结果,如果您执行停止和开始调试之类的操作,您已经破坏了之前缓存的任何内容。实际上,更准确地说,您已经杀死了进程并启动了一个新进程,并且由于缓存是进程绑定的,因此它与旧进程一起消失了。

【讨论】:

  • 我认为这不是真正的原因。我在代码中添加了以下行:jsonText = jsonText.Insert(2, string.Format(" \"param\": \"{0}\",", new Random().Next(100))); 每次调用此操作(无需调试)时,我都会得到不同的响应。因此,我的操作每次都会执行,但 CacheOutputAttribute 仍然不起作用。
【解决方案2】:

请试试这个

  [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);
    }

注意: 关于Outputcache的更多信息

【讨论】:

  • 第二种方式没有效果((
【解决方案3】:

你检查web.config它没有被禁用吗?

https://msdn.microsoft.com/en-us/library/ms228124(v=vs.100).aspx

<caching>
    <outputCache enableOutputCache="false">
    </outputCache>
</caching>

【讨论】:

  • 我刚刚检查过了。 Web.config 没有这个标签。然后我添加它并将标志enableOutputCache设置为true,但它没有效果
猜你喜欢
  • 2012-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
  • 2018-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多