Как заставить браузеры перезагружать кэшированные файлы CSS при использовании Asp.Net темы? [дубликат]
Возможные Дубликаты:
CSS в папке App_Theme кэшируется в браузере
Я видел, как "каков элегантный способ заставить браузеры перезагружать кэшированные файлы CSS / JS? " но ответ там использует PHP, и он не затрагивает тот факт, что CSS вводится динамически ASP.Net тема.
4 ответов
Я думаю, что у меня есть быстрый и грязный раствор. Трюк состоит в том, чтобы изучить элементы управления в заголовке страницы (например, в PreRender
phase), найдите ссылки, указывающие на CSS-файлы под App_Themes
папка и сделать их динамическими (добавив некоторую случайную информацию в строку запроса). Это, скорее всего, сообщит браузеру о недействительности кэшированной версии файла.
код:
protected void Page_PreRender(object sender, EventArgs e)
{
HtmlLink link = null;
foreach (Control c in Header.Controls)
{
if (c is HtmlLink)
{
link = c as HtmlLink;
if (link.Href.IndexOf("App_Themes/", StringComparison.InvariantCultureIgnoreCase) >= 0 &&
link.Href.EndsWith(".css", StringComparison.InvariantCultureIgnoreCase))
{
link.Href += string.Format("?t={0}", DateTime.Now.Ticks.ToString());
}
}
}
}
вывод:
<link href="App_Themes/MyTheme/MyTheme.css?t=634310637798128189"
type="text/css" rel="stylesheet" />
обратите внимание, что вам нужно иметь <head runat="server">
объявлено в разметке вашей страницы, чтобы иметь доступ к Header
свойство (в противном случае это будет null
).
Если вы спрашиваете, как серверная сторона может принудительно перезагрузить... Один из способов-динамически изменять имя файла CSS / JS, чтобы последующие вызовы страницы требовали другого файла.
<sarcasm>
Другой-просто сказать пользователю нажать CTRL-F5 :)
</sarcasm>
Я не нашел способ версии файлов App_Themes (пока), но вы можете установить их срок действия в относительно короткий период времени (например, 10 секунд), что минимизирует проблему кэша, давая вам некоторое преимущество в производительности кэширования. Помните, что если файл не изменился, сервер ответит 304-не изменен, поэтому трафик уменьшается, даже если браузер запрашивает файл.
добавить это веб.Config
<location path="App_Themes">
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="00:00:10" />
</staticContent>
</system.webServer>
</location>