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

Я запускаю приложение на порт приложения, написанный на 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 - Запрещено: доступ запрещен.

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

11 ответов

Решение

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

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

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

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

Эта проблема по умолчанию.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

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

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

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

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

- Содержание

- Контент \ Bootstrap \ ...

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

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

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

   BundleTable.EnableOptimizations = true;     // Added this           
}

Ошибка 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]")

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

BundleTable.EnableOptimizations = false;

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам