如何“失效”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导致myController
在myController
与参数myParam
:
- http://example.com/c/myParam
- http://example.com/myController/myAction/myParam
- 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)); }
- 什么是ASP.NET MVC控制器的生命周期?
- 在ASP.NET MVC中的ajax中包含antiforgerytoken
- 如何在ASP.NET MVC中创build一个CheckBoxListFor扩展方法?
- testing控制器使用User.Identity.Name的操作
- ASP.Net MVC DisplayFormat
- Visual Studio ASP.Net MVC撤消设置为起始页面操作
- 如何从ASP.NET MVC 3控制器返回一个200 HTTP状态代码
- ASP MVC:什么时候IController Dispose()被调用?
- 在控制器的构造函数中访问HttpContext.Request