Путь CDN не работает при связывании js в MVC

Я работаю над ASP.NET MVC4. У клиента есть требование загружать все javascripts и css из других доменов, таких как CDN, со связкой. Я использовал System.Web.Optimization.

ниже приведен код.

 var bundle = new ScriptBundle("~/bundles/scripts/");
bundle.Orderer = new AsIsBundleOrderer();
bundle.EnableFileExtensionReplacements = false;
bundle.CdnPath = "http://js.cusomdomainname.com";
bundle.Include("~/Scripts/jquery-1.7.1.min.js",
                "~/Scripts/jquery.unobtrusive-ajax.min.js",
                "~/Scripts/jquery.validate.min.js",
                "~/Scripts/jquery.validate.unobtrusive.min.js");

BundleTable.Bundles.UseCdn = true;
BundleTable.EnableOptimizations = true;
BundleTable.Bundles.Add(bundle);
BundleTable.Bundles.IgnoreList.Clear();

на виду

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

Но это не рендеринг из другого домена.

В чем может быть проблема?


person Dharmik Bhandari    schedule 13.06.2013    source источник
comment
Вот аналогичный вопрос. Ответил stackoverflow.com/questions/15434692/   -  person Hakuna Matata    schedule 13.06.2013


Ответы (2)


В этом примере показано, как загрузить ресурс из CDN в режиме «выпуск» и локально в режиме «отладка».

var jqueryCdnPath = "//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js";
var jqueryBundle = new ScriptBundle("~/bundles/jqueryCdn", jqueryCdnPath)
                       .Include("~/Scripts/jquery-{version}.js");

BundleTable.Bundles.Add(jqueryBundle);

CdnPath относится к ресурсу, который вы хотите получить из CDN, а Include указывает, где его найти локально. Вы можете изменить запрашиваемый из Web.config. Установите <compilation debug="true"/> для использования локального файла и <compilation debug="false"/> для использования CDN.

Дополнительные сведения см. в этой статье Объединение и минификация.

person jjokela    schedule 25.03.2014
comment
с вашим решением это полезно для загрузки нескольких jquery, но также для загрузки нескольких css с использованием cdn, тогда как это возможно с cdn, какие-либо идеи об этом, тогда, пожалуйста, дайте мне знать, что мне нужно. - person coderwill; 02.05.2017
comment
использование связывания только что столкнулось с проблемой при тестировании автономного сценария CDN. локальная загрузка скрипта не удалась. поскольку он выводит следующий скрипт на странице ‹script› (window.jQuery.mobile)||document.write('‹script src=/JQquery›‹\/script›'); ‹/скрипт›. поскольку пакет не добавляет ref.path минимизированного скрипта на отображаемую страницу. Это ошибка в библиотеке оптимизации. дополнительную информацию можно найти на stackoverflow.com/ вопросы/21004913/. Похоже, это до сих пор не решено. надеюсь, это сэкономит кому-то еще время. :) - person 0cool; 30.01.2020

Меня не волнует, как cdnPath работает в пакете, потому что вы можете указать только один путь к файлу для всего пакета. Если вы хотите настроить простую сеть CDN с вытягиванием источника, гораздо проще сделать следующее:

@Scripts.RenderFormat(
    "<script src='http://js.cusomdomainname.com{0}'></script>",
    "~/bundles/scripts/")

Это будет работать, если у вас есть пакет с большим количеством разных файлов, независимо от того, включена оптимизация или нет.

Это также решает проблему с параметром запроса, описанным здесь

person Brandon Cuff    schedule 05.08.2014
comment
Полностью согласен с вами. Связки почти работают. Если вы можете просто добавить путь CDN, и упаковщик загрузит включенные скрипты по указанному пути, отлично. - person WoofWoof88; 06.08.2014