2010-02-04 84 views
1

我在标准的ASP.Net Web应用程序项目应用程序中使用System.Web.Routing而不用MVC的路由。这主要是为了在我们正在开发的门户中获得整洁的URL(而不是〜/ default.aspx?contentid = 123我们有〜/ {contentsubject}。门户没有授权,所有的信息都在url中,所以在缓存我们可以缓存整个页面Outputcache不能用于路由

当我试图启用输出缓存时,我注意到没有缓存被执行,看起来outputcache页面指令被完全忽略了,这是真的还是我错过了一些东西? ?

我做了一个小测试应用程序(我上传到http://www.4shared.com/file/196605919/31903b07/OutputCacheTest.html)只包含一个网页,WebForm1.aspx的,使用母版页和用户控制。所有三个输出的当前日期和时间。

当我请求http // localhost/OutputcacheTest/Webform1.aspx时,10秒缓存将按预期工作,即所显示的时间只会每10秒更新一次。

该应用程序还定义了一个通配符路由,它捕获所有请求并返回与处理程序相同的Webform1.aspx。因此,当请求http // localhost/OutputcacheTest/myroute时,执行相同的页面,但现在缓存不起作用,即当前时间显示在每个请求上。

注意:使用内置开发Web服务器时,两种方案都可以工作,只有IIS似乎有这个问题。

有没有人有解决方案或解决如何在这种情况下启用输出缓存?

回答

1

我通过使模块和处理程序注册完全像本文(http://msdn.microsoft.com/en-us/magazine/dd347546.aspx)那样得到了这个工作。

早些时候,我将我的注册记录保留在该块中,现在我将它们移至顶端。我在此块
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">

所以,现在的输出缓存页指令工作还添加属性runAllManagedModulesForAllRequests = “真”!

1

您现在需要控制器操作的[OutputCache]属性。

随着MVC动作结果被缓存(可能会有一些参数值的变化)。

+0

感谢您的快速回答。问题是,因为我不使用MVC,只有路由,我没有OutputCacheAttribute,因为它在System.Web.Mvc命名空间中。 – MathiasR 2010-02-04 11:38:00

+0

在这种情况下,我不确定什么是正确的行动方案。也许查看MVC的源代码,看看它是如何完成的,以及如何找到解决方法。 – 2010-02-04 11:55:43