У меня вопрос о том, как программно инструктировать ASP.NET, чтобы пропустить разрешение запроса из выходного кэша.Условное кэширование вывода в ASP.NET
Представьте, что у вас есть кеш-страница страницы (например, http://domain/page.aspx) с помощью применения параметров политики кэширования от CMS до HttpResponse во время выполнения. В на основе запроса в зависимости от того, является ли текущий пользователь аутентифицирован + членом набора известных групп (или соответствует бизнес-логике), я хотел бы указать ASP.NET на skip, разрешая запрос с вывода кэш.
Сценарий состоит в том, что в системе одновременно используются два разных пользователя (или более). Пользователь A аутентифицируется + член набора известных групп, а пользователь B является анонимным. Независимо от того, какая страница выводится в кеш, я хочу, чтобы аутентифицированный пользователь просматривал все страницы, как если бы кеширование вывода не было включено; в то же время я хотел бы, чтобы ASP.NET продолжал обслуживать выходные кешированные страницы анонимным пользователям (или пользователям, которые не соответствуют бизнес-логике).
Типичное предложение - использовать VaryByHeader, VaryByParam и т. Д. И загрязнять выходной кеш - не очень хорошо, но, копая в модуле выходного кэша с использованием Reflector, я заметил, что модуль кэша вывода пропускает текущий запрос в случае, если пара известных заголовков «кеш-контроль». Что касается заголовков, они отправляются из браузера, если пользователь заставляет новую копию визуализироваться, нажав F5 или ENTER в адресной строке.
Итак, я просто устанавливаю заголовок «cache-control» в «no-cache» в настраиваемом модуле http в событии, которое происходит до события ResolveRequestCache, к которому подписывается выходной кеш. Как это:
context.Request.Headers["Cache-Control"] = "no-cache";
Все это хорошо и денди, однако, если HttpCachePolicy.SetValidUntilExpires политика (истина) кэш установлен, ASP.NET игнорирует заголовок запроса ранее установленного и обслуживает запрос из кэша вывода.
В качестве альтернативы, я думаю, я мог бы написать дополнительный код в событии после обработки в том же http-модуле, чтобы гарантировать, что HttpCachePolicy.SetValidUntilExpires (false) вызывается, в случае, если кэширование вывода настроено, но я думаю, что это было бы более чистым решением, позволяющим на самом деле дать указание ASP.NET просто пропустить разрешение запроса из выходного кэша. Я могу представить себе много важных решений этого вопроса, но я за правильной.
Для справки, я пытался большинство, если не все соответствующие методы класса HttpCachePolicy т.д .:
HttpResponse.Cache.SetNoServerCaching()).
Оливер, никогда не поздно и спасибо для ответа, который я сейчас реализовал. Мне интересно, как я мог пропустить метод ** AddValidationCallback **. работая с каркасом, и это то, что я пропустил с предыдущей реализацией. –