2011-01-11 61 views
8

我使用的OutputCache属性在我的MVC网站如下:旁路的OutputCache的ASP.NET MVC

[OutputCache(Duration = 5000, 
     VaryByParam = "name;region;model;id;op;content;featured;isStarred;page;size;")] 

但是有时我想完全绕过输出缓存,并迫使从数据库中获取。对于我不断将新数据加载到数据库进行测试的测试环境,情况尤其如此。

无论如何,我可以绕过缓存在这种情况下?

感谢。

回答

2

我只需要使用缓存依赖。我需要在运行时修改这个修改,所以配置文件不是一个选项。

将以下内容添加到我想要“禁止缓存”选项的操作中。

Response.AddCacheItemDependency("Pages"); 

并创建了我可以调用以下操作来刷新缓存。

public ActionResult RefreshCache() 
    { 
     HttpContext.Cache.Insert("Pages", DateTime.Now, null, 
           DateTime.MaxValue, TimeSpan.Zero, 
           CacheItemPriority.NotRemovable, 
           null); 
     Logger.Info("Cleansed cache"); 
     return RedirectToAction("HubContent"); 
    } 
10

您可以使用OutputCache配置文件来代替在属性中内联指定所有输出缓存参数。

输出缓存配置文件允许您将所有输出缓存设置放入web.config中,为配置文件命名,然后从属性中指向该配置文件。

完成设置后,您可以更改用于调试的web.config中的设置,以便缓存持续时间仅为1秒。显然,你会离开你的生产web.config文件的时间更长。

有关配置文件的详细信息,请http://msdn.microsoft.com/en-us/library/hdxfb6cy.aspx

+0

您不能为偏数执行此操作。 – 2012-12-06 14:47:02

4

如果你想将其完全关闭,你可以在你的web.config under.system.web使用

<caching> 
    <outputCache enableOutputCache="false" /> 
</caching> 

。如果你想从代码做到这一点(使用按钮或别的东西),你也可以这样做:

System.Configuration.Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~/"); 
System.Web.Configuration.OutputCacheSection cacheSection = (System.Web.Configuration.OutputCacheSection)config.GetSection("system.web/caching/outputCache"); 
cacheSection.EnableOutputCache = true/false; 
config.Save(); 

这将可能只有您的开发机器上工作。大多数服务器都设置为不允许编辑machine.config中的该部分。

+1

不会关闭它是`enableOutputCache =“false”`? – Maslow 2011-07-02 20:50:39

+0

+1 6个月后有人遇到了复制和粘贴错误 – 2011-07-13 14:42:18

1

这并不完全回答你的问题,但回答您的标题(这是不是“如何清除项目从缓存中 “): 你可以添加一个” VaryByParam“:

[OutputCache(Duration=5000,VaryByParam="YourExistingParams;CacheBypass")] 

那么y时ou想要绕过缓存,只需传递CacheBypass参数DateTime.UtcNow.Ticks(或任何随机事物)的值=>例如:http://localhost/?CacheBypass=1234567890