Кэш пончика не работает, когда кэш вывода установлен программно - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть страница веб-форм Asp.Net, в которой используется кэширование вывода.

Код задан программно внутри базовой страницы.

Однако недавно я тестировал страницу счтобы использовать кэширование пончика - с помощью элемента подстановки.

Я настроил простой тест.

<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, но не смог изменить это поведение.

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...