метод расширения бритвы для url.content для предотвращения кеширования - PullRequest
1 голос
/ 21 ноября 2011

Я хотел бы переопределить Url.Content, чтобы добавить параметр строки запроса к результирующей строке в Url.Content.

Причина в том, что у меня есть веб-приложение, которое я разрабатываю, и с каждым выпуском пользователи должны очищать свой кэш, чтобы получить новые css и js. Решением для этого является добавление номера версии в строку запроса для принудительной загрузки новой версии.

Рабочий раствор выглядит следующим образом:

@{ var version = "?v=" + ViewBag.VersionNumber; }
<head>
<link href="@Url.Content("~/ux/css/base.css")@version" rel="stylesheet" type="text/css" />
</head>

Версия устанавливается в файле конфигурации, поэтому с каждым выпуском версия обновляется. Я хотел бы, чтобы это было более автоматическим, хотя в настоящее время каждый раз, когда добавляется новая ссылка на css, мы должны помнить о добавлении @version в строку. Метод расширения, который возвращает путь с уже добавленным номером версии, будет идеальным.

Кроме того, если кто-нибудь знает, кого я мог бы сделать автоматическим изменением номера версии с помощью проверок TFS или компиляций, это тоже было бы очень полезно.

1 Ответ

4 голосов
/ 21 ноября 2011

Вы можете сделать что-то вроде этого:

public static string VersionedContent(this UrlHelper urlHelper, string contentPath)
{
    string result = urlHelper.Content(contentPath);
    var versionService = Engine.IocService.GetInstance<IVersionService>();
    string tag = versionService.GetVersionTag();
    if (result.Contains('?'))
    {
        result += "&v="+tag;
    }
    else
    {
        result += "?v="+tag;
    }
    return result;
}

Version Service может выглядеть примерно так:

public class VersionService : IVersionService
{
    string _versionTag;
    public VersionService()
    {
        _versionTag = Assembly.GetExecutingAssembly().GetName().Version.ToString();
        _versionTag = _versionTag.Replace('.', '-');
    }
    #region IVersionedContentService Members

    public string GetVersionTag()
    {
        return _versionTag;
    }

    #endregion
}

Возможно, вы захотите взглянуть на кассету

* РЕДАКТИРОВАТЬ * Для автом. построить номера с TFS, проверьте: автоматическая сборка-файл-версия нумерации в-ТПО-2010

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