Je lance une application sur le port d'applications écrite en MVC4.
Un paquet de fichiers css ne fonctionne pas. Dans mon ordinateur local en mode débogage, je vois le code de l'application et les fichiers. L'application fonctionne comme prévu.
<link href="/Content/css/home/basic-jquery-slider.css" rel="stylesheet"/>
<link href="/Content/css/home/Home.css" rel="stylesheet"/>
Lorsque je télécharge l'application sur Appharbor, je vois l'ensemble dans le code, mais l'application ne fonctionne pas.
<link href="/Content/css/home?v=zhVOIpUNuvCOZhJyBcQWpMlozayor4te6k-pM29wHqI1" rel="stylesheet"/>
Lorsque je navigue sur ce lien dans la href
, je reçois 403 - Interdit: l'accès est refusé.
Comment résoudre ce problème?
À mon avis, le chemin Content/css
existe sur le disque de votre application. Dans ce cas, IIS traiterait la demande, pas MVC.
Assurez-vous que le chemin d'accès virtuel à l'ensemble (paramètre du constructeur StyleBundle) ne correspond pas à un dossier du système de fichiers.
D'après les commentaires:
"Une bonne convention à suivre lors de la création d'ensembles consiste à inclure " Bundle "en tant que préfixe dans le nom de l'ensemble. Cela évitera un possible conflit de routage.
Ce problème est par défaut. NET ne "traite" pas les demandes ayant une extension .js ou .css.
Il y a deux correctifs pour cela (il suffit de faire UN)
A) Supprimez les extensions des noms de paquet. (recommandé) .NET traitera alors la demande et l'exécutera via BundleModule.
B) Ajoutez ceci à votre web.config dans la section system.webServer, ce qui obligera .NET à exécuter des requêtes .js et .css via BundleModule.
<modules runAllManagedModulesForAllRequests="true">
<remove name="BundleModule" />
<add name="BundleModule" type="System.Web.Optimization.BundleModule" />
</modules>
Un grand bravo à Ray Moro qui a découvert la cause réelle et l’a partagé avec moi sur mon blog: http://blog.cdeutsch.com/2012/11/fixing-404-errors-for-aspnet- mvc-apps.html
Cela m'est aussi arrivé lorsque j'ai essayé de déployer mon application ASP.NET MVC sur AppHarbor.
J'ai eu un paquet de feuilles de style avec le nom
@Styles.Render("~/Content/bootstrap")
et la structure du dossier était
-- Contenu
- Contenu\Bootstrap\...
En changeant simplement le nom du paquet en "~/Content/bootstrap-css"
, mon problème a été corrigé.
Je sais que je suis 4 ans en retard à cette question, mais cela a fonctionné pour moi.
public static void RegisterBundles(BundleCollection bundles)
{
...
BundleTable.EnableOptimizations = true; // Added this
}
403 erreur résolue. voici une explication détaillée et une solution pour l'erreur 403.
La solution est démontrée pour le bundle CSS. Cependant, cela s'applique également à JavaScript.
http://www.mvccentral.net/Story/Details/articles/kahanu/stylebundle-403-error-solved
En un mot, assurez-vous que le chemin virtuel [Script | Style]Bundle("~/content/[script | css]")
ne correspond pas à un dossier du système de fichiers (par exemple C:\approot\Content\[script | css]
) au lieu de [Script | Style]Bundle("~/content/[scriptDiff | cssDiff]")
Ce que je fais est très simple,
J'ajoute "js" à la fin de ScriptBundle comme suit: new ScriptBundle ("~/bundles/appjs") Et j'ajoute "css" à la fin de StyleBundle comme suit: new StyleBundle ("~/content/appcss ")
Les noms de mes dossiers ne finissent jamais par "js" ou "css".
Ça devrait le faire.
J'ai résolu le problème en ajoutant la ligne de code ci-dessous à la classe BundleConfig
BundleTable.EnableOptimizations = false;
Ceci s'applique également à la 'classe ScriptBundle', assurez-vous que le 'nom du paramètre' du constructeur ne correspond pas à un chemin d'accès dans le système de fichiers de l'application Web. Rappelez-vous que IIS essaiera de servir le fichier/la demande.
Le problème peut également provenir du fichier en cours de cryptage. Cela m'est arrivé lorsque j'ai téléchargé BootStrap et utilisé les fichiers fournis. Ils sont allumés en vert dans l'Explorateur Windows et fonctionnent correctement dans Visual Studio. Toutefois, lors de leur déploiement, j'ai obtenu une erreur 403.
Vous pouvez voir s'ils sont cryptés en allant dans les propriétés, puis dans les propriétés avancées et une case à cocher est encryptée.
Décocher et ce ne sera plus un problème.
J'ai le même problème avec cette erreur (403 Forbidden) . Dans mon cas, la raison en est qu'un serveur proxy de mon organisation bloque mon fichier css . Le nom du fichier Css correspond à l'une des règles de blocage.
J'ai découvert que le fichier bootstrap.css ne se trouvait pas dans le dossier de contenu, je l'ai donc cherché dans les packages et y ai collé .. cela a fonctionné!