ASP.NET MVC framework 4.5 CSS bundles не работает на хостинге
я запускаю приложение на App harbor, написанное в 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 - запрещено: Доступ запрещен.
How to устранить эту проблему?
11 ответов:
Я предполагаю, что путь на диске в вашем приложении. В этом случае IIS будет обрабатывать запрос, а не MVC.
убедитесь, что виртуальный путь к пакету (параметр конструктора StyleBundle) не соответствует папке в файловой системе.
из комментариев:
" хорошее соглашение, которое следует соблюдать при создании пакетов, должно включать "bundle" как префикс в имени пакета. Это предотвратит возможное маршрутизирующий конфликт."
эта проблема по умолчанию .NET не "обрабатывает" запросы, которые имеют .js or .расширение css.
есть два исправления для этого (вам нужно только сделать один)
A) удалите расширения из имен пакетов. (рекомендуется) это приведет к .NET для обработки запроса и запустить его через BundleModule.
B) добавьте это в свой веб.конфигурация в
случилось со мной тоже, когда я попытался развернуть мой ASP.NET приложение MVC на AppHarbor.
у меня был пакет таблиц стилей с именем
@Styles.Render("~/Content/bootstrap")
и структура папок была
-- Content
-- Content \ Bootstrap \ ...
, просто изменив имя пакета
"~/Content/bootstrap-css"
мой вопрос был resovled.
Я знаю, что я на 4 года опоздал на этот вопрос, но это сработало для меня.
public static void RegisterBundles(BundleCollection bundles) { ... BundleTable.EnableOptimizations = true; // Added this }
ошибка 403 решена. здесь подробное объяснение и решение для ошибки 403.
решениедемонстрируется для CSS bundle. Однако это также относится и к 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]")
то, что я делаю, очень просто,
Я добавляю "js" в конце ScriptBundle вот так: new ScriptBundle ("~/bundles / appjs") И я добавляю "css"в конце StyleBundle вот так: new StyleBundle ("~/content/appcss")
мои имена папок никогда не заканчиваются на "js" или "css".
Это должно сделать это.
Это относится и к классу ScriptBundle, убедитесь, что имя параметра конструктора не соответствует пути в файловой системе веб-приложения. Помните, что IIS будет пытаться обслуживать файл / запрос.
проблема также может исходить из зашифрованного файла. Это произошло со мной, когда я загрузил BootStrap и использовал предоставленные файлы. Они показали зеленый цвет в проводнике Windows и отлично работали в Visual Studio, но при развертывании я получил ошибку 403.
вы можете увидеть, если они зашифрованы, перейдя в свойства, то расширенные свойства и есть encypted флажок.
снимите флажок, и это больше не будет проблемой.
Я решил проблему, добавив ниже строку кода в bundleconfig class
BundleTable.EnableOptimizations = false;