1

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

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

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

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

4

1 回答 1

1

属性必须放在 Action 本身而不是这个方法上

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

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

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 ,但根据需要设置过期时间。

于 2012-11-08T15:36:49.093 回答