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 - Запрещен: доступ запрещен.

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

Ответ 1

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

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

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

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

Ответ 2

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

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

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

B) Добавьте это в свой 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

Ответ 3

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

У меня был набор таблиц стилей с именем

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

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

- Содержание

- Содержимое \Bootstrap \...

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

Ответ 4

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

Ответ 5

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

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

   BundleTable.EnableOptimizations = true;     // Added this           
}

Ответ 6

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

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

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

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

Ответ 7

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

Ответ 8

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

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

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

Ответ 9

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

Ответ 10

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