Связка ASP.Net MVC JS/CSS не работает при развертывании

Я развернул небольшое веб-приложение, написанное на ASP.Net MVC 4. У нас правильно настроены пакеты JS/CSS, и они отлично работают локально. Проблема в том, что при развертывании на сервере IIS 6 пакеты не работают. js/css не загружается, и когда я пытаюсь перейти по ссылке js в скрипте, я получаю 404.

Кто-нибудь развернул MVC 4 в IIS 6 и выполнил эту работу?


person Shane Courtrille    schedule 05.03.2012    source источник
comment
Я полагаю, что это будет проблема маршрутизации, я считаю, что вам нужно внести изменения в настройку маршрутизации, чтобы запустить MVC на IIS6, хотя, боюсь, у меня нет под рукой подробностей :(   -  person dougajmcdonald    schedule 05.03.2012


Ответы (3)


Проблема заключалась в том, что мы работали как виртуальный каталог, настроенный для ASP.Net 4.0, на веб-сайте по умолчанию, который был настроен для ASP.Net 2.0.

Мы создали новый веб-сайт и установили для него asp.net 4.0, и все заработало отлично. Согласно этому сообщению на Взломанный URL-адрес без расширения теперь должен работать на большинстве экземпляров IIS 6.

person Shane Courtrille    schedule 05.03.2012

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

IIS 6 не поддерживает URL-адреса без расширений. Когда он встречает URL-адрес, оканчивающийся на /js или /css, он совершенно не понимает, что должен связать этот URL-адрес с обработчиком aspnet_isapi.dll (ASP.NET).

Вы можете прочитать сообщение в блоге, в котором он объясняет, как можно настроить IIS 6 для ASP.NET MVC, чтобы включить URL-адреса без расширений. Речь идет об ASP.NET MVC 3, но точно так же обстоит дело и с ASP.NET MVC 4.

Да, и вы можете подумать об обновлении до IIS 7.0+, в котором эта функция включена по умолчанию при работе в режиме интегрированного конвейера.

person Darin Dimitrov    schedule 05.03.2012
comment
Эта ссылка предполагает, что у вас есть расширение, такое как .axd, которое является частью URL-адреса. Связки действительно не имеют расширения, поэтому то, что он говорит, не работает. У нас уже есть настройка сопоставления подстановочных знаков, и это тоже не помогает. - person Shane Courtrille; 05.03.2012
comment
@ShaneCourtrille, к сожалению, в настоящее время у меня нет доступа к блоку IIS 6, чтобы проверить это, но я подумал, что, правильно настроив URL-адреса без расширений, вы сможете этого добиться. Возможно, вы могли бы попробовать задать свой вопрос на serverfault.com, так как ваш вопрос больше связан с конфигурацией сервера, чем с программированием. - person Darin Dimitrov; 05.03.2012
comment
Нет, просто без расширений мне тоже не подходит, к сожалению. Я тоже не нашел решения для этого. - person Andrew Backer; 14.05.2012
comment
Я возился с этим какое-то время, в конце концов, я вернулся к старомодному способу... пока мы не обновимся до IIS 7 в работе! - person christiandev; 24.09.2013

Моя проблема была в файле BundleConfig.cs в App_Start. Мой файл BindleConfig.cs ранее выглядел следующим образом:

  bundles.Add(new ScriptBundle("~/Scripts/ui-js").Include(
                                     "~/Scripts/ui-js/jquery.min.1.11.1.js"
                                     , "~/Scripts/ui-js/bootstrap.min.js"
                                     , "~/Scripts/ui-js/bootstrap-slider.js"
                                     , "~/Scripts/ui-js/bootstrap-lightbox.js"
                                     , "~/Scripts/ui-js/common-script.js"
                                     , "~/Scripts/ui-js/html5.js"
                                     , "~/Scripts/ui-js/jquery.colorbox.js"
                                     , "~/Scripts/ui-js/respond.src.js"
                                     , "~/Scripts/ui-js/angular.min.js"
                                     , "~/Scripts/ui-js/bootstrap.js"
                                     ,"~/Scripts/ui-js/jRate.min.js"
                                     , "~/Scripts/ui-js/jcrop.min.js"
                                     ));

И на моей странице макета было

@Scripts.Render("~/Scripts/ui-js")

После поиска в Google я нашел решение, поскольку вы не можете использовать ту же структуру папок для виртуального пути new ScriptBundle().

Поэтому я изменил выше на это

bundles.Add(new ScriptBundle("~/Scripts/ppScript").Include(
                                     "~/Scripts/ui-js/jquery.min.1.11.1.js"
                                     , "~/Scripts/ui-js/bootstrap.min.js"
                                     , "~/Scripts/ui-js/bootstrap-slider.js"
                                     , "~/Scripts/ui-js/bootstrap-lightbox.js"
                                     , "~/Scripts/ui-js/common-script.js"
                                     , "~/Scripts/ui-js/html5.js"
                                     , "~/Scripts/ui-js/jquery.colorbox.js"
                                     , "~/Scripts/ui-js/respond.src.js"
                                     , "~/Scripts/ui-js/angular.min.js"
                                     , "~/Scripts/ui-js/bootstrap.js"
                                     ,"~/Scripts/ui-js/jRate.min.js"
                                     , "~/Scripts/ui-js/jcrop.min.js"
                                     ));

И на моей странице макета я назвал это как

@Scripts.Render("~/Scripts/uiScript")

ПРИМЕЧАНИЕ. Вам нужно сделать то же самое с пакетом CSS и modernizr :)

person Nithin Paul    schedule 10.08.2015