Некоторые браузеры кешируют файлы js и css, не обновляя их, если вы их не заставите. Самый простой способ.
Я только что реализовал это решение, которое, похоже, работает.
Объявите переменную версии на своей странице
public string version { get; set; }
Получите номер версии из ключа web.config
version = ConfigurationManager.AppSettings["versionNumber"];
На странице aspx выполняйте вызовы javascript и таблиц стилей, например
<script src="scripts/myjavascript.js?v=<%=version %>" type="text/javascript"></script>
<link href="styles/mystyle.css?v=<%=version %>" rel="stylesheet" type="text/css" />
Поэтому, если вы установите version = 1.1 из 1.0 в своем web.config, ваш браузер загрузит последние файлы, что, надеюсь, избавит вас и ваших пользователей от разочарования.
Есть ли другое решение, которое работает лучше, или это вызовет непредвиденные проблемы для веб-сайта?
Ответы:
Я решил эту проблему, добавив последнюю измененную временную метку в качестве параметра запроса к скриптам.
Я сделал это с помощью метода расширения и использовал его в своих файлах CSHTML. Примечание: эта реализация кэширует временную метку на 1 минуту, поэтому мы не так сильно загружаем диск.
Вот метод расширения:
А затем на странице CSHTML:
В обработанном HTML это выглядит так:
источник
Ваше решение работает. На самом деле это довольно популярно.
Даже Stack Overflow использует похожий метод:
Где
v=6184
наверное номер ревизии SVN.источник
В ASP.NET Core (MVC 6) это работает из коробки с помощью
asp-append-version
помощника тега:источник
ASP.NET MVC справится с этим за вас, если вы используете пакеты для своего JS / CSS. Он автоматически добавит номер версии в виде GUID к вашим пакетам и обновит этот GUID только при обновлении пакета (то есть в любом из исходных файлов есть изменения).
Это также помогает, если у вас много файлов JS / CSS, так как это может значительно сократить время загрузки контента!
Посмотреть здесь
источник
Для этого в asp.net есть встроенный способ: объединение . Просто используйте это. Каждая новая версия будет иметь уникальный суффикс «? V = XXXXXXX». В режиме отладки связывание отключено, для включения настройки make в web.config:
Или добавьте в метод RegisterBundles (связки BundleCollection):
Например:
BundleConfig.cs:
_Layout.cshtml:
источник
На это есть более простой ответ, чем ответ, данный оператором в вопросе (подход тот же):
Определите ключ в web.config:
Сделайте вызов appsettings прямо со страницы aspx:
источник
На основе ответа Адама Тегана , измененного для использования в приложении веб-форм.
В коде класса .cs:
В разметке aspx:
А в обработанном HTML-коде он выглядит как
источник
Интересно, что у этого самого сайта есть проблемы с подходом, который вы описываете в связи с некоторыми настройками прокси, хотя он должен быть отказоустойчивым.
Проверьте это обсуждение Meta Stack Overflow .
Поэтому в свете этого может иметь смысл использовать для обновления не параметр GET, а фактическое имя файла:
даже при том, что это больше работы, так как вам придется фактически создать файл или создать для него перезапись URL.
источник
Мне нужен был простой лайнер, чтобы сделать путь уникальным для разрушения кеша. Это сработало для меня:
Если файл был изменен с момента последней загрузки на страницу, браузер извлечет обновленный файл.
Он генерирует
last modified
штамп из.js
файла и помещает его туда вместо версии, доступ к которой может быть нелегким.Другой вариант - получить контрольную сумму файла.
источник
Вот подход, который работает с ASP.NET 5 / MVC 6 / vNext .
Шаг 1. Создайте класс для возврата времени последней записи файла, как и в других ответах в этом потоке. Обратите внимание: для этого требуется внедрение зависимостей ASP.NET 5 (или другого).
Шаг 2: Зарегистрируйте сервис для внедрения в startup.cs :
Шаг 3. Затем в ASP.NET 5 можно внедрить службу непосредственно в представление макета, например _Layout.cshtml, следующим образом:
Есть некоторые последние штрихи, которые можно было бы сделать, чтобы лучше объединить физические пути и обработать имя файла в стиле, более совместимом с синтаксисом, но это отправная точка. Надеюсь, это поможет людям перейти на ASP.NET 5.
источник
На моем сайте aspnet MVC 4 я использовал немного другую технику:
_ViewStart.cshtml:
Затем в реальных представлениях:
источник
<?php $rand_no = rand(10000000, 99999999)?> <script src="scripts/myjavascript.js?v=<?=$rand_no"></script>
У меня это работает во всех браузерах. Здесь я использовал PHP для генерации случайного числа. Вы можете использовать свой собственный серверный язык.
источник
Начиная с приведенного выше ответа, я немного изменил код, чтобы помощник работал и с файлами CSS, и добавлял версию каждый раз, когда вы вносите какие-то изменения в файлы, а не только при сборке.
источник
Получите время изменения файла, как показано ниже
Добавьте это с вводом как строку запроса
Вызовите это из разметки.
Подход помощника по расширению MVC
Добавить метод расширения
Добавьте это пространство имен в web.config
Используйте его как
источник
Упрощенные предыдущие предложения и предоставление кода для разработчиков .NET Web Forms.
Это будет принимать как относительные ("~ /"), так и абсолютные URL-адреса в пути к файлу ресурса.
Поместите в файл класса статических расширений следующее:
А затем назовите его на своей мастер-странице как таковой:
источник
Основываясь на приведенном выше ответе, я написал небольшой класс расширения для работы с файлами CSS и JS:
Вместо того, чтобы писать что-то вроде:
Теперь вы можете написать:
Т.е. просто замените
Url.Content
наUrl.VersionedContent
.Сгенерированные URL-адреса выглядят примерно так:
Если вы используете класс расширения, вы можете добавить обработку ошибок в случае, если
MapPath
вызов не работает, посколькуcontentPath
это не физический файл.источник
Я использую аналогичный способ сделать то же самое, что и вы, без изменения каждой страницы. Добавлено событие PreRender в мастер-файл. Он сохраняет мою логику в одном месте и применим как к файлам js, так и к файлам css.
источник
Вы можете переопределить свойство DefaultTagFormat скриптов или стилей.
источник
Для решения этой проблемы в моем приложении ASP.Net Ajax я создал расширение, а затем вызвал его на главной странице.
Более подробно вы можете пройти по ссылке .
источник
Простой и умный способ реализовать управление версиями css в приложении .net с помощью приведенной ниже концепции. Нет необходимости писать внутренний код.
источник
Основная проблема, связанная с этим способом, в основном состоит в том, что вам нужно не забывать обновлять номер версии в своем коде каждый раз, когда вы вносите какие-либо изменения в файлы css или js.
Возможно, лучший способ сделать это - установить гарантированный уникальный параметр для каждого из ваших файлов css или js, например:
Это заставляет файлы запрашиваться с сервера каждый раз, что также означает, что ваш сайт не будет таким производительным при загрузке страницы, поскольку эти файлы никогда не будут кэшироваться и каждый раз будут использовать ненужную полосу пропускания.
По сути, если вы не забываете обновлять номер версии каждый раз, когда вносятся изменения, вам может сойти с рук то, как вы это делаете.
источник
Для страниц ASP.NET я использую следующие
ПЕРЕД
ПОСЛЕ (принудительная перезагрузка)
Добавление DateTime.Now.Ticks работает очень хорошо.
источник