在运行时期间动态禁用/启用页面的outputcache

时间:2013-09-23 19:14:25

标签: asp.net caching outputcache c1-cms

我使用的是CMS系统,名称为Composite C1。它通过单页(Page.aspx)呈现所有内容,该页面附加了自定义输出缓存配置文件。

这一切都很好,但我遇到了一个问题。

我想要缓存,但是我想要禁用输出缓存的某些网址。

我知道我可以添加到缓存配置文件中的varybycustom属性,但我不认为这会给我我想要的内容。我希望能够在点击特定URL(或者某些其他条件)时完全禁用缓存。

这似乎非常棘手,因为每个页面/网址都通过单个Page.aspx文件呈现,并定义了outputcache配置文件。

有没有人对如何解决这个问题有任何建议?

2 个答案:

答案 0 :(得分:1)

\Global.asax中,您会发现覆盖GetVaryByCustomString,调用复合C1来评估响应是否应该缓存。如果请求不是针对您不希望缓存的其中一个URL,则可以进行干预,并且只调用Composite:

if (context.Request.Url.AbsolutePath != "/dont-cache-this")
{
    return ApplicationLevelEventHandlers.GetVaryByCustomString(context, custom) ?? base.GetVaryByCustomString(context, custom);
}

return null;

请注意,稍后升级Composite C1可能会替换\Global.asax并擦除您的更改。

另见http://msdn.microsoft.com/en-us/library/5ecf4420.aspx

答案 1 :(得分:1)

您可以将以下代码插入不应缓存的页面上的函数。或者添加一个可以做到这一点的小函数:

HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);