我一直遇到奇怪的缓存问题,并将一个非常简单的.NET页面与输出缓存指令组合在一起。但是,页面不缓存(每次刷新时内容都会更新)。
我的本地计算机(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通常也不起作用,除了在一个完全像上面配置的测试页面上。我无法弄清楚为什么一个页面是不同的,并且是唯一一个在开发服务器上工作但是当复制到我的localhost上运行的站点时,它不再起作用。
我注意到在我们的生产网站上,使用母版页似乎使输出缓存无法正常工作,但在此localhost网站中我没有使用母版页,但它仍然无效。
我应该从哪里开始寻找解决此问题的方法?我查看了IIS设置,无法找到任何明显的设置来打开/关闭页面级缓存。我也在广泛搜索网页,似乎找不到其他人。
答案 0 :(得分:5)
Microsoft已禁用包含Cookie的网页的输出缓存,以防止一个用户获取适用于其他用户的页面的缓存版本。
有一种解决方法可以从输出中删除Cookie。 看到 https://support.episerver.com/hc/en-us/articles/115004119986-output-caching-broken
作为替代方案,您还可以通过缓存用户控件来使用部分页面缓存。
答案 1 :(得分:0)
在定义中添加CacheProfile属性,
<%@ OutputCache CacheProfile="CacheOneHour" Duration="3600" Location="Server" VaryByParam="none" %>
在Web.config文件中声明缓存配置文件。 (在system.web中,放置您的声明):
<system.web>
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="CacheOneHour"
duration="3600"
location="Server"
varyByParam="none" />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
</system.web>
答案 2 :(得分:0)
我遇到了类似的问题。问题是在基页上停止了缓存。
public static void StopCachingOfPage()
{
// Stop Caching in IE
HttpContext.Current.Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
// Stop Caching in Firefox
HttpContext.Current.Response.Cache.SetNoStore();
}
所以只需在代码中查找。如果您需要缓存覆盖此调用。