如何“失效”ASP.NET MVC输出caching的部分?

有没有办法编程无效ASP.NET MVC输出caching的部分? 我希望能够做的是,如果用户发布的数据会改变从caching的操作中返回的内容,那么可以使caching的数据无效。

这甚至有可能吗?

一种方法是使用该方法:

HttpResponse.RemoveOutputCacheItem("/Home/About"); 

另一种方式在这里描述: http : //aspalliance.com/668

我认为你可以实现第二个方法,通过使用方法级别属性为每个你想要的动作,只是添加到表示键的string。 那就是如果我理解你的问题。

编辑:是的,asp.net mvc OutputCache只是一个包装。

如果你使用varyByParam="none"那么你只是使"/Statistics"无效 – 这就是如果<id1>/<id2>查询string值。 这将使所有版本的页面无效。

我做了一个快速testing,如果你添加varyByParam="id1" ,然后创build多个版本的页面 – 如果你说无效失效"/Statistics/id1"它将使该版本无效。 但是你应该做进一步的testing。

我做了一些cachingtesting。 这是我发现的:

您必须清除导致您的操作的每条path的caching。 如果你有3条path导致你的控制器完全相同的动作,你将有一个caching为每个路线。

比方说,我有这个路由configuration:

 routes.MapRoute( name: "config1", url: "c/{id}", defaults: new { controller = "myController", action = "myAction", id = UrlParameter.Optional } ); routes.MapRoute( name: "Defaultuser", url: "u/{user}/{controller}/{action}/{id}", defaults: new { controller = "Accueil", action = "Index", user = 0, id = UrlParameter.Optional } ); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Accueil", action = "Index", id = UrlParameter.Optional } ); 

然后,这3个path导致myControllermyController与参数myParam

  1. http://example.com/c/myParam
  2. http://example.com/myController/myAction/myParam
  3. http://example.com/u/0/myController/myAction/myParam

如果我的行动如下

 public class SiteController : ControllerCommon { [OutputCache(Duration = 86400, VaryByParam = "id")] public ActionResult Cabinet(string id) { return View(); } } 

我将有一个caching每个路由(在这种情况下3)。 因此,我将不得不使每条路线失效。

喜欢这个

 private void InvalidateCache(string id) { var urlToRemove = Url.Action("myAction", "myController", new { id}); //this will always clear the cache as the route config will create the path Response.RemoveOutputCacheItem(urlToRemove); Response.RemoveOutputCacheItem(string.Format("/myController/myAction/{0}", id)); Response.RemoveOutputCacheItem(string.Format("/u/0/myController/myAction/{0}", id)); }