由于某种原因,这不起作用:
[OutputCache(Duration = 600, VaryByParam = "id")]
public string GetSomeValue(int id)
{
return _service.GetSomeValue(id).ToString();
}
我在一个返回视图的控制器中对此进行了测试,但确实有效。
知道为什么吗?或任何可能的解决方法?
答案 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。