Как удалить токен запроса от генератора версии с помощью пакетов в mvc 4

Привет, я использую приложение mvc4 и используя пакеты для рендеринга скриптов и css

ниже показано, как я создал пакет:

bundles.Add( new StyleBundle( "~/Content/css" ).Include(
                    "~/Content/bootstrap/css/bootstrap.css",
                    "~/Content/bootstrap/css/bootstrap-responsive.css",
                    "~/Content/site.css" ) );

Теперь он генерирует такой набор, как я вижу в источнике браузера:

<link href="/Content/css?v=8HZAB6C8ZnrIPYNFzMQKt0AR4AUsUYBjxPPkbGSRIZo1" rel="stylesheet">

Я хочу удалить строку запроса «v» версии в ссылке.

благодаря

3
nl ja de

4 ответы

Я создал расширение для mvc-bundling, которое позволяет вам переместить часть запроса в url вместо этого. Он может генерировать URL-адреса, подобные этому

/bundles/css/20130315191550.css

/ Связки/CSS/_NNIf4XxdPCITzjlKPMgZwHMSUsPyxxGaNCIe6mgAkg1

Code available at http://github.com/unger/Bundling.Extensions

Может быть, это может дать вам некоторое представление о том, как его решить?

6
добавлено

Я закончил делать следующее:

Сначала я изменил стандартный BundleResolver с помощью этой реализации

public class ReplaceQueryStringBundlerResolver : IBundleResolver
        {
            private readonly IBundleResolver _resolver;

            public ReplaceQueryStringBundlerResolver(IBundleResolver resolver)
            {
                _resolver = resolver;
            }

            public IEnumerable GetBundleContents(string virtualPath)
            {
                return _resolver.GetBundleContents(virtualPath);
            }

            //The important part, modifies the generated Url
            public string GetBundleUrl(string virtualPath)
            {
                var bundleUrl = _resolver.GetBundleUrl(virtualPath);
                bundleUrl = bundleUrl.Replace("?v=", "/v/");
                return bundleUrl;
            }

            public bool IsBundleVirtualPath(string virtualPath)
            {
                return _resolver.IsBundleVirtualPath(virtualPath);
            }
        }

И это можно зарегистрировать в методе RegisterBundles , подобном этому.

 BundleResolver.Current = new ReplaceQueryStringBundlerResolver(BundleResolver.Current);

Что в основном инструктирует текущего распознавателя использовать наш необходимый Url формат.

Это решение лучше, потому что нам не нужно изменять коды Styles.Render или Scripts.Render в любом месте вызывающего кода.

Since we need to map these new bundling Urls to the bundles tables, I tried to do something similar with the current Api, but I couldn't get it working so as a temporary solution I added the rewrite rules in the web.config so we can rewrite /v/ to ?v=. Ideally the optimization module should do this, since the rewrite rules restrict us to follow some naming conventions and mine is that all bundles virtual paths should start with "~/bundles/"


  
  


  
  

Если я могу перехватить что-то в классе BundleHandler , который обрабатывает запросы пакетов, я придумаю обновление.

4
добавлено

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

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

Простым обходным решением является просто визуализировать путь к вашему набору явно, так как это не изменится, если вы не хотите строку запроса.

2
добавлено
Была ли возможность настроить отпечаток пальца в v.1.1.0?
добавлено автор Derek Hunziker, источник
к сожалению нет
добавлено автор Hao Kung, источник

Просто напишите простое расширение следующим образом:

public enum RenderType{Css, Js}
public static class _Extentions
{
    public static string RemoveQueryString(this IHtmlString _HtmlString, RenderType _RenderType){
        string Render = _HtmlString.ToHtmlString().Replace(Environment.NewLine, "").Replace("?v=", "/v/");
        Render = Render.Replace(_RenderType == RenderType.Css ? "\" rel=" : "\"></script>", _RenderType == RenderType.Css ? ".css\"  rel=" : ".js\"></script>");
        return Render;
    }      
}

И используйте url rewriting следующим образом:





 




 

и использовать его таким образом:

<%=Styles.Render("~/css").RemoveQueryString(RenderType.Css)%>
<%=Scripts.Render("~/js").RemoveQueryString(RenderType.Js)%>

Обратите внимание, что виртуальный путь в функции Render и тот, который находится в перезаписи URL, должен соответствовать:

Scripts.Render ( "~/<сильный> JS "). RemoveQueryString (RenderType.Js)

match url = "^ JS /v/(.+). js"

1
добавлено
DotNetRuChat
DotNetRuChat
2 992 участник(ов)

Чат русскоязычного .NET сообщества http://dotnet.ru/ Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @xamarin_russia, @microsoftstackjobs, @uwp_ru Флуд в @dotnettalks

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

pro.net
pro.net
710 участник(ов)

Обсуждение .NET Framework и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). Флудилка: @dotnettalks Участник @proDOT

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

.NET Talks: Force Push Masters
.NET Talks: Force Push Masters
490 участник(ов)

Свободный чат .NET разработчиков. Правила: t.me/dotnettalks/56823 Вам могут быть интересны: @dotnetruchat, @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @dotnetgroup, @xamarin_russia, @microsoftstackjobs, @uwp_ru http://combot.org/chat/-1001128250813

.NET Chat Убежище
.NET Chat Убежище
246 участник(ов)

Чат .NET разработчиков под эгидой MSK/SPB .NET Community Group Вам могут быть интересны: @fsharp_chat, @dotnetruchat, @cilchat, @xamarin_russia, @microsoftstackjobs, @dotnetgroup Флуд в @dotnettalks

.NET CIL Chat
.NET CIL Chat
54 участник(ов)

.NET CIL (aka IL aka MSIL)