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

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           
}

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]")


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

Хороший ответ, но вы не должны оставлять только ссылку, по крайней мере, основные шаги этой статьи были бы полезны, если связанный сайт не работает.
— Витор М. Барбоза

5

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

BundleTable.EnableOptimizations = false;

3

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

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

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

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


2

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


1

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

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

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


0

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


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.