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