首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OutputCache不起作用

OutputCache不起作用
EN

Stack Overflow用户
提问于 2017-04-13 12:45:07
回答 3查看 5.1K关注 0票数 10

我想要缓存从操作返回的数据。为此,我使用OutPutCacheAttribute。这是我的客户代码:

代码语言:javascript
复制
$(document).ready(function() {
    $.get('@Url.Action("GetMenu", "Home")', null, 
        function(data) {
            parseMenu(data);                  
    });
}

这是我的服务器代码:

代码语言:javascript
复制
[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 I创建了第二个操作来测试该属性,而不进行调试。这是它的代码:

代码语言:javascript
复制
[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}等。

EN

回答 3

Stack Overflow用户

发布于 2017-04-13 14:22:49

在其默认实现中,输出缓存是进程绑定并存储在内存中的.因此,如果您执行诸如停止并开始调试之类的操作,那么您已经销毁了以前缓存的任何内容。实际上,更准确地说,您已经终止了该进程并启动了一个新进程,而且由于缓存是进程绑定的,所以它与旧进程一起消失了。

票数 1
EN

Stack Overflow用户

发布于 2017-04-13 14:14:06

请尝尝这个

代码语言:javascript
复制
  [OutputCache(Duration = 86400, Location = OutputCacheLocation.ServerAndClient,VaryByParam = "none")]

如果不工作,请尝试:

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

注:关于输出缓存的更多信息

票数 0
EN

Stack Overflow用户

发布于 2017-04-13 14:56:41

您检查过web.config没有禁用它吗?

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

代码语言:javascript
复制
<caching>
    <outputCache enableOutputCache="false">
    </outputCache>
</caching>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43392707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档