c# - 输出缓存不起作用

标签 c# asp.net-mvc caching

我想缓存一个 Action 的返回数据。为此,我使用了 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} 等等

最佳答案

在其默认实现中,输出缓存是进程绑定(bind)的并存储在内存中。因此,如果您执行停止并开始调试之类的操作,就会破坏之前缓存的所有内容。实际上,更准确地说,您已经终止了该进程并启动了一个新进程,并且由于缓存是进程绑定(bind)的,它与旧进程一起消失了。

关于c# - 输出缓存不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43392707/

相关文章:

c# - 从内容页面获取并转换 Masterpage UserControl 以访问特定的 UC 属性

javascript - Gijgo 网格按钮单击行内。

ruby-on-rails - Rails - 出于测试目的实现可选片段缓存的最佳方法

c# - 缓存友好优化 : Object oriented matrix multiplication and in-function tiled matrix multiplication

c# - NHibernate - 二级集合缓存不一致

c# - 如何创建 wix 类型 35 自定义操作

c# - 如何在共享文件夹中存储的 C# 类中使用记录器

c# - 属性未调用的隐式/显式转换运算符 (System.ComponentModel.DataAnnotation.dll)

asp.net-mvc - Angular ng-include cshtml 页面

c# - 如何使用 MVC Web API 进行身份验证?