1

我在标准 ASP.Net Web 应用程序项目应用程序中使用来自 System.Web.Routing 的路由而不使用 MVC。这主要是为了在我们正在开发的门户中获得更整洁的 url(而不是 ~/default.aspx?contentid=123 我们有 ~/{contentsubject}。门户未经授权,所有信息都在 url 中,因此在缓存中场景我们可以缓存完整的页面。

当我尝试启用输出缓存时,我注意到没有进行缓存。似乎 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 似乎有这个问题。

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

4

2 回答 2

1

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

使用 MVC 操作,结果会被缓存(可能会因某些参数值而异)。

于 2010-02-04T11:23:17.230 回答
1

我通过使模块和处理程序注册与本文 ( http://msdn.microsoft.com/en-us/magazine/dd347546.aspx ) 中的完全一样来完成这项工作。

早些时候,我的注册是最后一个,现在我把它们移到了顶部。我还在此块中添加了属性 runAllManagedModulesForAllRequests="true"
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">

所以现在 outputcache 页面指令正在工作!

于 2010-02-04T13:38:07.753 回答