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

Asp.net mvc ASP.NET MVC缓存因控制器操作参数而异,asp.net-mvc,caching,outputcache,Asp.net Mvc,Caching,Outputcache,是否有任何方法可以通过使用属性的控制器操作参数改变缓存?如果我的参数以REST方式嵌入到URL中,那么我们有一种方法将不起作用。默认情况下,缓存是以这种方式工作的。不同的URL提供不同的缓存位置。也许您的问题中缺少了一些东西,但是,如上所述,它已经以这种方式工作。在操作方法中认识到“VaryByParam”并不意味着“通过传递到该操作方法中的参数而变化”,这一点也很重要。它的意思是“根据传递到作为HTTP参数发起的操作方法中的参数而变化” [OutputCache(CacheProfile =

是否有任何方法可以通过使用属性的控制器操作参数改变缓存?如果我的参数以REST方式嵌入到URL中,那么我们有一种方法将不起作用。

默认情况下,缓存是以这种方式工作的。不同的URL提供不同的缓存位置。也许您的问题中缺少了一些东西,但是,如上所述,它已经以这种方式工作。

在操作方法中认识到“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”类型发送的模式参数将应用于缓存。

从MVC3开始,情况不再如此