ASP.NET MVC framework 4.5 CSS-пакет не работает на хостинге

144

Я запускаю приложение на порт приложения, написанный на MVC4.

Комплект файлов CSS не работает. На моем локальном компьютере в режиме отладки я вижу код приложения и вижу файлы. Приложение работает, как и ожидалось.

<link href="/Content/css/home/basic-jquery-slider.css" rel="stylesheet"/>
<link href="/Content/css/home/Home.css" rel="stylesheet"/>

Когда я загружаю приложение в Appharbor, я вижу пакет в коде, но приложение не работает.

<link href="/Content/css/home?v=zhVOIpUNuvCOZhJyBcQWpMlozayor4te6k-pM29wHqI1" rel="stylesheet"/>

Когда я просматриваю эту ссылку, hrefя получаю 403 - Запрещено: доступ запрещен.

Как решить эту проблему?

Рикардо Поло Харамильо
источник
Не уверен, что вы решили эту проблему, но эта статья исправила мою. stackoverflow.com/a/18474844/955831
Джейсон Фолья

Ответы:

284

Я предполагаю, что путь Content/cssсуществует на диске в вашем приложении. В этом случае IIS будет обрабатывать запрос, а не MVC.

Убедитесь, что виртуальный путь для пакета (параметр конструктора StyleBundle) не совпадает с папкой в ​​файловой системе.

Из комментариев:

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

Павел
источник
2
Спасибо. Это нормально, что он работает, когда работает в localhost?
Рикардо Поло Харамильо
3
Спасибо за этот ответ - сводил меня с ума!
Рич Тернер
8
@RicardoPolo, под "localhost", вы имеете в виду, когда запускаете его на iis express на своей машине для разработки? Тогда да, это нормально, что он работает там, потому что вы, скорее всего, работаете в режиме отладки, который отключает связывание.
bvgheluwe
1
Спасибо, это
сводило
11
+1 Этот ответ поможет мне понять, как виртуальные пути работают с пакетированием. Я прочитал оригинальный пост на MSDN ( asp.net/mvc/tutorials/mvc-4/bundling-and-minification ), но после решения моей проблемы с вашим ответом я обнаружил в конце поста немного текста о виртуальном путь: «Хорошее соглашение, которому нужно следовать при создании комплектов, должно включать« комплект »в качестве префикса в имени комплекта. Это предотвратит возможный конфликт маршрутизации». Я думаю, что это предложение ДОЛЖНО быть выделено жирным шрифтом с красно-желтым предупреждающим изображением. : D Спасибо!
Самуил
45

Эта проблема по умолчанию .NET не «обрабатывает» запросы с расширением .js или .css.

Есть два исправления для этого (вам нужно сделать только один)

A) Удалите расширения из имен пакетов. (рекомендуется). Это заставит .NET обработать запрос и запустить его через BundleModule.

Б) Добавьте это в ваш web.config в разделе system.webServer, что заставит .NET выполнять запросы .js и .css через BundleModule.

<modules runAllManagedModulesForAllRequests="true">
  <remove name="BundleModule" />
  <add name="BundleModule" type="System.Web.Optimization.BundleModule" />
</modules>

Большой привет Рэю Моро, который выяснил реальную причину и поделился ею со мной в моем блоге: http://blog.cdeutsch.com/2012/11/fixing-404-errors-for-aspnet-mvc-apps.html

cdeutsch
источник
Обновлен с дополнительной информацией о первопричине, а также второй вариант.
cdeutsch
1
У меня возникла эта проблема, потому что имя моего пакета было похожим на папку именем, оканчивающимся на "css". Хотя у моего пакета точно не было расширения файла, предложение А привело меня к проблеме.
dsnunez
1
Это должен быть правильный ответ, он помогает мне с той же проблемой.
psulek
отличный ответ он мне помочь
датский крону
Эта штука с отсутствующим разделом <module> из web.config, о боже ...
XDS
19

Со мной тоже случилось, когда я попытался развернуть свое приложение ASP.NET MVC в AppHarbor.

У меня был пакет стилей с именем

@Styles.Render("~/Content/bootstrap")

и структура папок была

- Содержание

- Содержание \ Bootstrap \ ...

Просто изменив имя пакета на "~/Content/bootstrap-css"мою проблему, был восстановлен.

Ясир Шейх
источник
15

Я знаю, что я опоздал на этот вопрос на 4 года, но это сработало для меня.

public static void RegisterBundles(BundleCollection bundles)
{
   ...

   BundleTable.EnableOptimizations = true;     // Added this           
}
RayLoveless
источник
2
Из всех ответов выше и ниже. Это единственный, который работал на меня.
Хаим Кац
3
Это позволяет оптимизировать, когда вы находитесь в режиме отладки. Хотя это отличный способ проверить, работают ли пакеты на компьютере разработчика, вы не должны оставлять это утверждение в своем коде.
Рудей
9

Ошибка 403 устранена. Вот подробное объяснение и решение проблемы 403.
Решение продемонстрировано для пакета CSS. Однако это также относится и к JavaScript.

http://www.mvccentral.net/Story/Details/articles/kahanu/stylebundle-403-error-solved

В двух словах, убедитесь, что виртуальный путь [Script | Style]Bundle("~/content/[script | css]")не соответствует папке в файловой системе (например C:\approot\Content\[script | css]) вместо[Script | Style]Bundle("~/content/[scriptDiff | cssDiff]")

yantaq
источник
2
Спасибо, это проблема, с которой я столкнулся. Чтобы решить эту проблему, в BundleConfig.cs я изменил путь с @ Styles.Render ("~ / Content / css") на @ Styles.Render ("~ / bundles / css"). Теперь он работает при локальном запуске в режиме отладки и при публикации в режиме выпуска или отладки.
Кен Палмер
Хороший ответ, но вы не должны оставлять только ссылку, по крайней мере, основные шаги этой статьи были бы полезны, если связанный сайт не работает.
Витор М. Барбоза
5

Я решил проблему, добавив ниже строку кода в классе BundleConfig

BundleTable.EnableOptimizations = false;
Ye Yint
источник
3

То, что я делаю, очень просто,

Я добавляю "js" в конце ScriptBundle следующим образом: new ScriptBundle ("~ / bundles / appjs") И добавляю "css" в конце StyleBundle примерно так: new StyleBundle ("~ / content / appcss")

Мои имена папок никогда не заканчиваются на «js» или «css».

Это должно сделать это.

abelabbesnabi
источник
2

Это относится и к «классу ScriptBundle», убедитесь, что «имя параметра» для конструктора не соответствует пути в файловой системе веб-приложения. Помните, что IIS попытается обработать файл / запрос.

Уильям
источник
1

Проблема также может быть связана с зашифрованным файлом. Это произошло со мной, когда я скачал BootStrap и использовал предоставленные файлы. Они показали зеленый цвет в проводнике Windows и отлично работали в Visual Studio, но при развертывании я получил ошибку 403.

Вы можете увидеть, зашифрованы ли они, перейдя в свойства, затем в дополнительные свойства и есть зашифрованный флажок.

Снимите флажок, и это больше не будет проблемой.

Грег Гам
источник
0

У меня та же проблема с этой ошибкой (403 Forbidden). В моем случае причина в том, что прокси-сервер в моей организации блокирует мой файл css. Имя файла CSS соответствует одному из правил блока.

Константин Орлов
источник
0

Я обнаружил, что файл bootstrap.css не находится в папке содержимого, поэтому я искал его в пакетах и ​​вставил туда ... он работал!

Маджид АльСарра
источник