ASP.NET OutputCache и обратные передачи

В PHP вы можете ссылаться на переменные, используя сигил и строковый литерал или переменную, содержащую имя переменной, например:

${'foo'} = 'test';
echo $foo;

Это выведет «test». Странная вещь в этом поведении состоит в том, что вы также можете использовать не-строки в качестве имен переменных, например:

${array()} = 'test';
echo ${array()};
${NULL} = 'test';
echo ${NULL};

Теперь у нас есть переменные с именем array () и даже NULL! Все содержат строку «тест».

5
задан John Sheehan 27 January 2010 в 22:25
поделиться

3 ответа

Верно, дело в том, что вы меняете параметром NO, поэтому html ответа на первый запрос кэшируется и обслуживается в течение следующих 10 минут (теоретически). Если вы хотите кэшировать GET, но обрабатывать разные POST, вам следует варьировать параметры POST.

Позвольте мне привести вам пример. У вас есть текстовый ввод, используемый для отправки электронного письма с его содержимым в POST. Если вы измените это имя входа, каждый запрос в течение периода кэширования с разными значениями для этого ввода текста попадет в ваш обработчик и обработает отправку электронной почты.

С другой стороны, вы можете отличаться на *, но тогда вы потеряете Кэширование в режиме ядра.

6
ответ дан 14 December 2019 в 04:45
поделиться

Вы правы в своих предположениях.

Ваша директива OutputCache сообщает механизму кэширования вывода кэшировать всю отображаемую страницу для определенного URL на 600 секунд.

В вашем простом примере вы, вероятно, не используете какие-либо строки запроса, однако объявление VaryByParam в директиве позволяет вам указать параметр строки запроса, который обеспечивает отдельное кэширование каждого значения этого параметра. Например, если у вас есть:

<%@ OutputCache Duration="600" VaryByParam="ProductID"%>

, тогда эти три разных URL-адреса будут кэшироваться по отдельности, а изменение значения параметра «ProductID» на что-то еще не кэшированное обеспечит обработку и отображение страницы в ASP.NET. время выполнения правильно:

http://www.example.com/viewproduct.aspx?ProductID=123
http://www.example.com/viewproduct.aspx?ProductID=3
http://www.example.com/viewproduct.aspx?ProductID=67

В вашем примере при нажатии кнопки, страница уже была ранее отрисована (и кэширована), и когда вы отправляете обратно, нет никакой разницы в URL-адресе, который вы отправляете обратно и эффективно перезагружаете, поэтому среда выполнения ASP.NET отобразит вам кешированную страницу, не переходя в процессе его повторного рендеринга.

Помимо изменения значения параметра «VaryByParam», директива OutputCache представляет собой подход к кэшированию страниц по принципу «все или ничего». Однако в директиве есть атрибут "VaryByContol", который может использоваться только в пользовательских элементах управления ASP.NET, а не на полноценной веб-странице ASP.NET.

Из вашего вопроса это больше похоже на то, что вам нужно исследовать частичное кеширование страниц. Либо это, либо механизм аннулирования кеша при возникновении какого-либо события. Обычно это делается путем добавления «зависимости кеша».

Для этого могут помочь следующие ссылки:

Кэширование частей страницы ASP.NET
Совет / прием: Реализуйте «кольцевое кэширование» с помощью функции замены выходного кэша ASP.NET 2.0.
Программное удаление Страница из OutputCache

2
ответ дан 14 December 2019 в 04:45
поделиться

Что вам нужно, так это подстановка после кеширования:

Динамическое обновление частей кэшированной страницы

0
ответ дан 14 December 2019 в 04:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: