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 соответствует одному из правил блока.