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 не был в папке содержимого, поэтому я искал его в пакетах и вставил туда.. он работает!