以编程方式设置输出缓存时,Doughnut缓存不起作用

时间:2019-04-17 13:09:17

标签: asp.net caching webforms outputcache donut-caching

我有一个使用输出缓存的Asp.Net Web表单页面。

该代码以编程方式在基本页面内设置。

但是,我最近一直在测试页面,以期使用“甜甜圈”缓存-使用替代元素。

我设置了一个简单的测试。

<section>
    <div>
        <asp:Substitution ID="subTime" runat="server" MethodName="GetTime" />
    </div>
    <div>
        <asp:Label ID="lblTime" runat="server"></asp:Label>
    </div>
</section>

protected void Page_Load(object sender, EventArgs e)
{
    lblTime.Text = DateTime.Now.ToString();
}

public static string GetTime(HttpContext context)
{
    return DateTime.Now.ToString();
}

首先,我将输出缓存代码直接添加到页面中。

<%@ OutputCache VaryByParam="None" VaryByHeader="User-Agent" Location="Any" Duration="30" %>

导航到其他页面并返回时,最上面的(甜甜圈缓存)时间会更新,而标签时间会保持预期的不变。它还在F5上更新,而标签又保持不变。

我相信这是正确的行为。

但是,当我尝试以编程方式设置输出缓存时,会得到不同的行为。

    protected void Page_Load(object sender, EventArgs e)
    {
        var cache = Response.Cache;
        cache.SetExpires(DateTime.Now.AddSeconds(30));
        cache.SetSlidingExpiration(true);
        cache.SetCacheability(HttpCacheability.ServerAndPrivate);
        cache.SetValidUntilExpires(true);

        lblTime.Text = DateTime.Now.ToString();
    }

现在,直到缓存过期(30秒)为止,两个时间都不会更新,并且F5每次都会更新两次。

到目前为止,我已经尝试过SetCacheability属性的各种形式,并删除了SetValidUntilExpires,但是无法更改此行为。

有什么想法吗?

0 个答案:

没有答案