.net 返回字符串的缓存控制器

k3bvogb1  于 2023-04-22  发布在  .NET
关注(0)|答案(1)|浏览(88)

这是不工作的原因:

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

我在一个返回视图的控制器中测试了这个,它确实工作。
你知道为什么吗?或者任何可能的解决方法?

h43kikqp

h43kikqp1#

该属性必须放置在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,但根据需要设置过期时间。

相关问题