Пакет 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"/>

Коли я переглядаю посилання в розділі hrefI, я отримую 403 - Заборонено: Доступ заборонено.

Як це усунути?


Не впевнений, чи вирішили ви цю проблему, але ця стаття виправлена ​​у мене. stackoverflow.com/a/18474844/955831
Jason Foglia

Відповіді:


284

Я здогадуюсь, що шлях Content/cssіснує на диску у вашому додатку. У цьому випадку IIS буде обробляти запит, а не MVC.

Переконайтесь, що віртуальний шлях для пакета (параметр конструктора StyleBundle) не відповідає папці файлової системи.

З коментарів:

"Хороша умова, яку слід дотримуватися при створенні пакетів, - це включити" bundle "як префікс у назву пакета. Це запобіжить можливий конфлікт маршрутизації."


2
Дякую. Це нормально, що він працює, коли працює в localhost?
Рікардо Поло Джарамілло

3
Думаю за цю відповідь - заганяв мене!
Багатий Тернер

8
@RicardoPolo, під "localhost", ви маєте на увазі під час запуску його на iis express на своїй розробці? Тоді так, це нормально, що він працює там, оскільки ви, швидше за все, працюєте в режимі налагодження, що вимикає групування.
bvgheluwe

1
Дякую, що сьогодні мене
звели з

11
+1 Ця відповідь допоможе мені зрозуміти, як функціонують віртуальні шляхи при поєднанні. Я прочитав оригінальний пост на msdn ( asp.net/mvc/tutorials/mvc-4/bundling-and-minification ), але після вирішення проблеми з вашою відповіддю я виявив наприкінці публікації трохи тексту, що говорив про віртуальний path: "Хороша умова, яку слід дотримуватися при створенні пакетів, - це включити" bundle "як префікс у назву пакета. Це запобіжить можливий конфлікт маршрутизації." Я думаю, що це речення ДОЛЖНЕ бути поставлене жирним шрифтом із червоним / жовтим попереджувальним зображенням. : D Дякую!
Самуїл

45

Ця проблема за замовчуванням .NET не "обробляє" запити, які мають розширення .js або .css.

Для цього є два виправлення (потрібно зробити ОДНО)

A) Видаліть розширення з імен пакету. (рекомендовано) Це призведе до того, що .NET обробить запит та запустить його через BundleModule.

B) Додайте це до свого web.config у розділі system.webServer, що призведе до запуску .NET та .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

чудова відповідь це допоможе мені
DKR

Ця річ із відсутнім розділом <module> від web.config oh man ...
XDS

19

Зі мною теж трапилось, коли я спробував розгорнути свій додаток ASP.NET MVC на AppHarbor.

У мене була група стилів із назвою

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

і структура папки була

- Зміст

- Вміст \ Завантаження \ ...

Просто змінивши назву пакета в "~/Content/bootstrap-css"моєму питанні, переглянуто.


15

Я знаю, що я запізнююсь на це 4 роки, але це спрацювало на мене.

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

   BundleTable.EnableOptimizations = true;     // Added this           
}

2
З усіх відповідей вище та нижче. Це єдиний, хто працював на мене.
Хаїм Кац

3
Це дозволяє оптимізувати, коли ви знаходитесь в режимі налагодження. Хоча це чудовий спосіб перевірити, чи працюють пакети на машині розробки, не слід залишати цю заяву у своєму коді.
Rudey

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 ("~ / контент / 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 Заборонено). У моєму випадку причина - проксі-сервер в моїй організації блокує мій файл css. Назва файлу Css відповідає одному з правил блоку.


0

Я дізнався, що файл bootstrap.css не знаходився в папці вмісту, тому я шукав його в пакунках і вставляв туди. Він працював!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.