ASP.NET MVC针对每个操作点击outputcache

时间:2012-04-16 12:20:15

标签: asp.net-mvc outputcache

我们使用ASP.NET MVC 3和AppFabric作为分布式缓存解决方案运行相当大的站点构建。我们已经实现了一个自定义的OutputCacheAdapter来使用我们的AppFabric集群。

我们看到ASP.NET为每个操作调用OutputCacheProvider.Get()方法,即使该操作未使用@OutputCacheAttribute进行修饰。

如果您使用默认的outputcacheprovider,那就不是问题,但是当您运行驻留在单独机器上的outputcacheprovider时。

2 个答案:

答案 0 :(得分:4)

根据设计,首先检查输出缓存是否有页面的缓存副本。如果存在缓存副本,则返回它并且不执行任何进一步操作。特别是,不会导出,检查或执行控制器和控制器操作。仅当页面未缓存时才会发生这种情况。

您需要更改缓存提供程序,以便快速确定是否可以缓存页面。只有它是一个可缓存的页面,它应该去检查分布式缓存。此检查不能基于OutputCacheAttribute,因为在此部分请求处理期间它们不可用。相反,必须使用URL,cookie和其他HTML标头信息进行快速检查。

答案 1 :(得分:1)

您可以使用Donut Cache outputcache属性,该属性允许您为输出缓存键定义前缀。因此,在自定义提供程序中,如果缓存键以您自己的前缀开头,则只需获取/设置缓存。