这是不工作的原因:
[OutputCache(Duration = 600, VaryByParam = "id")] public string GetSomeValue(int id) { return _service.GetSomeValue(id).ToString(); }
我在一个返回视图的控制器中测试了这个,它确实工作。你知道为什么吗?或者任何可能的解决方法?
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,但根据需要设置过期时间。
1条答案
按热度按时间h43kikqp1#
该属性必须放置在Action本身而不是此方法上
根据你的评论,听起来你似乎在寻找服务器缓存。我推荐memcached或Redis之类的东西,但同样你也可以使用IIS内置该高速缓存。注意,你必须知道什么时候你的缓存应该被打破,以及如果你在一个网络农场上,你将如何处理分发。在最简单的形式中,你可以尝试这样做
Add的完整选项让您有机会设置滑动或绝对到期
例如,为依赖项传递null,但根据需要设置过期时间。