缓存控制器,返回一个字符串

时间:2012-11-08 15:28:35

标签: asp.net asp.net-mvc

由于某种原因,这不起作用:

    [OutputCache(Duration = 600, VaryByParam = "id")]
    public string GetSomeValue(int id)
    {
        return _service.GetSomeValue(id).ToString();
    }

我在一个返回视图的控制器中对此进行了测试,但确实有效。

知道为什么吗?或任何可能的解决方法?

1 个答案:

答案 0 :(得分:1)

该属性必须放在Action本身而不是此方法

  [OutputCache(Duration = 600, VaryByParam = "id")]
   Public ActionResult Get(int id)

根据您的评论,听起来您正在寻找服务器缓存。我建议使用memcached或Redis之类的东西,但同样可以使用IIS内置的缓存。请注意,如果您在Web场中,则必须知道何时应该突发缓存以及如何处理分发。用最简单的形式你可以试试这个

public string GetSomeValue(int id)
{
  var cachedItem = HttpRuntime.Cache.Get(id.ToString());
  if(cachedItem==null){
     value = _service.GetSomeValue(id).ToString();
     cachedItem = HttpRuntime.Cache.Add(id.ToString(), value);
  }
  return cachedItem;
}

Add的完整选项让您有机会设置滑动或绝对过期

public object Add(
         string key, 
         object value, 
         System.Web.Caching.CacheDependency dependencies, 
         System.DateTime absoluteExpiration, 
         System.TimeSpan slidingExpiration, 
         System.Web.Caching.CacheItemPriority priority,  
         System.Web.Caching.CacheItemRemovedCallback onRemoveCallback)

例如,为依赖项传递null,但是根据需要设置expiration。