ASP.NET以编程方式启用输出缓存不起作用->;为什么

本文关键字:不起作用 gt 为什么 缓存 输出 NET 编程 方式 启用 ASP | 更新日期: 2023-09-27 18:05:29

为什么在下面的aspx和代码隐藏中,当以编程方式启用输出缓存(在代码隐藏中启用(时,它不起作用并出现问题?

aspx:

<%@ Page Language="C#" AutoEventWireup="true" Inherits="ProgrammaticOutputCaching"
    CodeBehind="ProgrammaticOutputCaching.aspx.cs" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="lblDate" runat="server" Font-Bold="False" Font-Names="Verdana" Font-Size="XX-Large"></asp:Label><br />
        <br />
        <asp:Button ID="Button1" runat="server" Text="Refresh" />
    </div>
    </form>
</body>
</html>

代码隐藏:

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Cache.SetCacheability(HttpCacheability.Public);
        // Use the cached copy of this page for the next 60 seconds.
        Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
        //Response.Cache.VaryByParams.IgnoreParams = true;
        // This additional line ensures that the browser can't
        // invalidate the page when the user clicks the Refresh button
        // (which some rogue browsers attempt to do).
        Response.Cache.SetValidUntilExpires(true);
        lblDate.Text = "The time is now:<br>" + DateTime.Now.ToString();
}

有了输出缓存的page指令就没有问题:
平均
aspx:

<%@ Page Language="C#" AutoEventWireup="true" Inherits="OutputCaching" CodeBehind="OutputCaching.aspx.cs" %>
<%@ OutputCache Duration="60" VaryByParam="Name;Age" Location="Server" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        &nbsp;<asp:Label ID="lblDate" runat="server" Font-Bold="False" Font-Names="Verdana"
            Font-Size="XX-Large"></asp:Label>
        <br />
        <br />
        <asp:Button ID="Button1" runat="server" Text="Refresh" />
    </div>
    </form>
</body>
</html>


代码隐藏:

protected void Page_Load(object sender, EventArgs e)
{
        lblDate.Text = "The time is now:<br>";
        lblDate.Text += DateTime.Now.ToString();
}

那么编程的问题是什么呢?

ASP.NET以编程方式启用输出缓存不起作用->;为什么

Response.Cache

所有这些方法都是修改响应中的HTTP头,请求浏览器做一些事情(在这种情况下,修改它的缓存方式(。

你用小提琴手看过这些吗?

我猜ASP.net已经更改了上次修改的日期(因为它知道时间已经更改(,但是浏览器仍然会更新有几个原因:

  • 浏览器可能已禁用缓存
  • 缓存可能刚刚被清除
  • 它正在使用其他方法来决定需要从服务器刷新的页面
  • 浏览器可以请求它想要的任何内容

我建议你研究一下其中的一些点,但你绝对不应该依赖浏览器缓存来确保你的应用程序的功能。