ASP.NET MVC缓存因控制器操作参数而异

时间:2008-12-11 22:48:12

标签: asp.net-mvc caching outputcache

有什么办法可以使用outputcache属性通过控制器操作参数改变缓存?如果我的参数以REST方式嵌入到URL中,那么varybyparam将无效。

2 个答案:

答案 0 :(得分:10)

在Action方法中实现'VaryByParam'并不意味着'通过传递给该动作方法的参数变化'也很重要。它的意思是“因传入该动作方法的参数而异,这些参数起源于HTTP参数”。

[OutputCache(CacheProfile = "ContentPage", VaryByParam = "mode")]
public ActionResult Index(string key, string mode)
{

}

让我们说这个行动方法的路线是:

  routes.MapRoute(
   "video-route-short",
   "video/{key}",
   new { controller = "Video", action = "Index", key = (string)null }
  );

正如Craig上面所说,关键参数是URL的一部分,因此缓存不适用于它 - 因此它基本上都是缓存的。

将通过“?mode=1”类型发送的mode参数将适用于缓存。

答案 1 :(得分:5)

默认情况下,缓存以这种方式工作。不同的URL提供不同的缓存位置。也许您的问题中缺少某些内容,但正如所述,它已经以这种方式运作。