我一直有奇怪的缓存问题,并与一个输出缓存指令组成一个非常简单的.NET页面。但是,页面没有缓存(每次刷新时都会更新内容)。NET OutputCache指令不工作
我在我的本地计算机(Windows 7)上安装了一个简单,最小的我们的CMS(Ektron v.9.0 SP2)网站。在这个网站项目中,我创建了一个测试输出缓存的简单页面。以下是页面代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CacheTest.aspx.cs" Inherits="CacheTest" %>
<%@ OutputCache Duration="3600" Location="Server" VaryByParam="None" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Cache Test</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<p><%= DateTime.Now.ToString() %></p>
</div>
</form>
</body>
</html>
此页面根本没有缓存。
在我们的生产站点上,OutputCache一般也不起作用,除非在一个测试页上配置完全像上面那样。我找不出为什么这个页面是不同的,并且是唯一一个在dev服务器上工作的人,但是当被复制到在本地主机上运行的站点时,它不再工作。
我注意到,在我们的生产站点上,使用母版页似乎使输出缓存不起作用,尽管在本地主机站点中我没有使用母版页,但它仍然不起作用。
我应该从哪里开始寻找解决此问题的方法?我查看了IIS设置,找不到任何明显的设置来打开/关闭页面级缓存。我也广泛搜索了网页,似乎无法找到任何其他人遇到此问题。
我在链接中尝试了解决方法,它完美地工作,尽管我必须添加一个测试来检查HttpContext.Current在PreSendRequestHeaders方法中是否为null,以避免在调试时出现异常。饼干可以解释为什么它可以在某些情况下工作,而不是生产网站上的其他人。 – user0474975
该链接解决了问题的解决方法,但我无法找到任何有关MS为什么会这样做的官方解释,或者这是否是一个危险的修复程序。有任何想法吗? – Lavamantis
当您向访问您的网站的任何人提供同一页面时,您只想使用页面输出缓存。如果您正在基于Cookie或会话变量提供任何自定义内容,那么您不想使用此代码。危险是如果你根据他们的cookie向人们提供不同的内容,你可能会向访问该页面的第二人提供错误的内容。 – maddoxej