Подтвердить что ты не робот

Абсолютный URL-адрес в пакете ASP

Я использую библиотеку jQuery для Карт Google, и в первую очередь это зависит от загружаемых скриптов Google. Я хотел бы иметь возможность включать оба в комплект как таковой:

  bundles.Add(new ScriptBundle("myfoobundle").Include(
    "http://maps.googleapis.com/maps/api/js?sensor=false&libraries=places",
    "~/scripts/jquery.fooplugin-{version}.js"
  ));

Это, похоже, не работает (выдает исключение, жалующееся на первую строку). И можно сказать, что это не должно работать, потому что абсолютный URL-адрес не предназначен для минирования/вложения.

Но текущий подход - это хлопот, так как мне нужно убедиться, что зависимости правильные, и это происходит в разных местах (половина проблемы в коде связи, другая половина в представлении).

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

UPDATE:

Чтобы рассмотреть комментарии относительно использования CDN в качестве решения: если я укажу bundles.UseCdn = true, он не будет иметь эффекта, и я все равно получаю исключение The URL 'http://maps.googleapis.com/maps/api/js?sensor=false&libraries=places' is not valid. Only application relative URLs (~/url) are allowed. Также я не уверен, что подразумевается в первую очередь потому, что я уже использую поддержку CDN для jQuery и т.д., Поэтому не знаю, как это может противоречить моему прецеденту.

4b9b3361

Ответ 1

В настоящее время вам нужно будет включить локальную копию jquery, которая зависит от внутренней части пакета, или вам придется управлять тегами script, как вы упомянули. Мы знаем об этой проблеме управления децентрацией, и она относится к категории управления активами, которую мы отслеживаем с помощью этого рабочего элемента на codeplex

Ответ 2

Если вы используете версию System.Web.Optimization >= 1.1.2, есть новый удобный способ переопределения URL-адреса для Styles и Scripts. В приведенном ниже примере я захватываю CdnBaseUrl из web.config для использования в качестве базового url для всех скриптов и таблиц стилей:

public class BundleConfig
{
    private static readonly string BaseUrl = ConfigurationManager.AppSettings["CdnBaseUrl"];

    public static void RegisterBundles(BundleCollection bundles)
    {
        // This is the new hotness!!
        Styles.DefaultTagFormat = "<link href=\"" + BaseUrl + "{0}\" rel=\"stylesheet\"/>";
        Scripts.DefaultTagFormat = "<script src=\"" + BaseUrl + "{0}\"></script>";

        bundles.Add(new ScriptBundle("~/bundles/js").Include(
            "Your scripts here..."
        ));

        bundles.Add(new StyleBundle("~/bundles/css").Include(
            "Your css files here..."
        ));
    }
}

Дополнительная информация об оптимизации статического сайта (CDN)

Ответ 3

Основываясь на учебниках MVC, ваш синтаксис неверен для создания пакета из CDN. И, как говорили другие, убедитесь, что у вас есть свойство bundles.UseCdn = true;. Используя пример на сайте MVC - ваш код должен отражать следующее:

public static void RegisterBundles(BundleCollection bundles)
{
   bundles.UseCdn = true;   //enable CDN support
   //add link to jquery on the CDN
   var jqueryCdnPath = "http://maps.googleapis.com/maps/api/js?sensor=false&amp;libraries=places";
   bundles.Add(new ScriptBundle("myfoobundle", jqueryCdnPath).Include(
                "~/Scripts/jquery-{version}.js"));
}

Ответ 4

Если это просто вопрос получения абсолютного url в комплекте, вы можете пойти на это.

public static class Extensions
    {
        public static IHtmlString RenderScript(this UrlHelper helper, params string[] paths)
        {
            string scripts = System.Web.Optimization.Scripts.Render(paths).ToHtmlString();
            string hostName = HttpContext.Current.Request.Url.Scheme + Uri.SchemeDelimiter + HttpContext.Current.Request.Url.Authority;
            string replaced = Regex.Replace(scripts, "src=\"/", "src=\"" + hostName + "/", RegexOptions.Multiline | RegexOptions.IgnoreCase);
            return new HtmlString(replaced);
        }
    }

В основном это возьмет bahvior из Scripts.Render, а затем применит к нему абсолютные URL-адреса. Затем в представлении вам нужно написать

  @Url.RenderScript("~/bundles/jquery")

вместо

  @Scripts.Render("~/bundles/jquery")

Наслаждайтесь кодированием!!...

Ответ 5

Я попробовал это, как было предложено, и это не сработало:

string googleMapsApiCDN = "http://maps.google.com/maps/api/js?sensor=false&amp;language=en";
        bundles.Add(new ScriptBundle("~/bundles/gmap3", googleMapsApiCDN).Include(
                    "~/Scripts/GMap3/gmap3.min.js",         // GMap3 library
                    "~/Scripts/GMap3/mygmap3-about.js"      // Pops up and configures     
GMap3 on About page
                    ));

Был отображен файл mygmap3-about.js script, но gmap3.min.js и CDN script из Google, где оба исключены.

Ответ 6

Пробовали ли вы включить поддержку CDN и выяснили, разрешает ли этот URL абсолютный URL-адрес:

bundles.UseCdn = true;