.NET OutputCache 指令不起作用
.NET OutputCache directive not working
我遇到了奇怪的缓存问题,因此我将一个非常简单的 .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 通常也不起作用,除了在一个完全按照上述配置的测试页面上。我不明白为什么那个页面不同,并且是唯一一个在开发服务器上工作的页面,但是当复制到我本地主机上的站点 运行 时,它不再工作了。
我确实注意到,在我们的生产站点上,使用母版页似乎会使输出缓存不起作用,但在这个本地主机站点中,我没有使用母版页,它仍然不起作用。
我应该从哪里着手解决这个问题?我查看了 IIS 设置,但找不到任何明显的设置来打开 on/off 页面级缓存。我也在网上进行了广泛的搜索,但似乎找不到其他人遇到这个问题。
在您的定义中添加 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>
Microsoft 已禁用包含 cookie 的页面的输出缓存,以防止一个用户获取用于另一个用户的页面的缓存版本。
有一种解决方法可以从输出中删除 cookie。
看
https://support.episerver.com/hc/en-us/articles/115004119986-Output-Caching-Broken
作为替代方案,您还可以通过缓存用户控件来使用部分页面缓存。
我遇到了类似的问题。问题是基页上的缓存已停止。
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();
}
因此,只需在您的代码中查找即可。如果您需要缓存覆盖此调用。
我遇到了奇怪的缓存问题,因此我将一个非常简单的 .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 通常也不起作用,除了在一个完全按照上述配置的测试页面上。我不明白为什么那个页面不同,并且是唯一一个在开发服务器上工作的页面,但是当复制到我本地主机上的站点 运行 时,它不再工作了。
我确实注意到,在我们的生产站点上,使用母版页似乎会使输出缓存不起作用,但在这个本地主机站点中,我没有使用母版页,它仍然不起作用。
我应该从哪里着手解决这个问题?我查看了 IIS 设置,但找不到任何明显的设置来打开 on/off 页面级缓存。我也在网上进行了广泛的搜索,但似乎找不到其他人遇到这个问题。
在您的定义中添加 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>
Microsoft 已禁用包含 cookie 的页面的输出缓存,以防止一个用户获取用于另一个用户的页面的缓存版本。
有一种解决方法可以从输出中删除 cookie。 看 https://support.episerver.com/hc/en-us/articles/115004119986-Output-Caching-Broken
作为替代方案,您还可以通过缓存用户控件来使用部分页面缓存。
我遇到了类似的问题。问题是基页上的缓存已停止。
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();
}
因此,只需在您的代码中查找即可。如果您需要缓存覆盖此调用。