Le bundle CSS ASP.NET MVC Framework 4.5 ne fonctionne pas sur l'hébergement

144

J'exécute une application sur le port d'application écrite en MVC4.

Un ensemble de fichiers css ne fonctionne pas. Sur mon ordinateur local en mode débogage, je vois le code de l'application et je vois 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 le bundle 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 le hrefI get 403 - Forbidden: L'accès est refusé.

Comment résoudre ce problème?

Ricardo Polo Jaramillo
la source
Je ne sais pas si vous avez résolu ce problème, mais cet article a corrigé le mien. stackoverflow.com/a/18474844/955831
Jason Foglia

Réponses:

284

Je suppose que le chemin Content/cssexiste sur le disque dans votre application. Dans ce cas, IIS traiterait la demande, pas MVC.

Assurez-vous que le chemin d'accès virtuel du bundle (le paramètre du constructeur StyleBundle) ne correspond pas à un dossier dans le système de fichiers.

D'après les commentaires:

"Une bonne convention à suivre lors de la création de bundles est d'inclure" bundle "comme préfixe dans le nom du bundle. Cela évitera un possible conflit de routage."

Paul
la source
2
Merci. Est-il normal que cela fonctionne lorsqu'il est exécuté dans l'hôte local?
Ricardo Polo Jaramillo
3
Thnaks pour cette réponse - me rendait fou!
Rich Turner
8
@RicardoPolo, par "localhost", voulez-vous dire en l'exécutant sur iis express sur votre machine de développement? Alors oui, il est normal que cela fonctionne là-bas car vous exécutez probablement en mode débogage, ce qui désactive le regroupement.
bvgheluwe
1
Merci, cela me rendait fou aujourd'hui
xingyu
11
+1 Cette réponse m'aide à comprendre comment les chemins virtuels fonctionnent avec le regroupement. J'ai lu le post original sur msdn ( asp.net/mvc/tutorials/mvc-4/bundling-and-minification ) mais après avoir résolu mon problème avec votre réponse, j'ai trouvé à la fin du post un peu de texte parlant de virtuel path: "Une bonne convention à suivre lors de la création de bundles est d'inclure" bundle "comme préfixe dans le nom du bundle. Cela évitera un éventuel conflit de routage.". Je pense que cette phrase DEVRAIT être mise en gras avec une image d'avertissement rouge / jaune. : D Merci!
Samuel
45

Ce problème est que, par défaut, .NET ne «traite» pas les demandes qui ont une extension .js ou .css.

Il existe deux correctifs pour cela (vous n'avez besoin d'en faire qu'UNE)

A) Supprimez les extensions des noms de bundle. (recommandé) Cela obligera .NET à traiter la demande et à l'exécuter via BundleModule.

B) Ajoutez ceci à votre web.config dans la section system.webServer , ce qui amènera .NET à exécuter les requêtes .js et .css via BundleModule.

<modules runAllManagedModulesForAllRequests="true">
  <remove name="BundleModule" />
  <add name="BundleModule" type="System.Web.Optimization.BundleModule" />
</modules>

Grand bravo à Ray Moro qui a découvert la cause réelle et l'a partagée avec moi sur mon blog: http://blog.cdeutsch.com/2012/11/fixing-404-errors-for-aspnet-mvc-apps.html

cdeutsch
la source
Mis à jour avec plus d'informations sur la cause première avec une deuxième option.
cdeutsch
1
J'avais ce problème car le nom de mon bundle était un nom de dossier se terminant par "css". Bien que mon bundle n'ait pas exactement une extension de fichier, la suggestion A m'a conduit au problème.
dsnunez
1
Cela devrait être la bonne réponse, cela m'aide avec le même problème.
psulek
great answer it help me
DKR
Cette chose avec la section <module> manquante de web.config oh man ...
XDS
19

Cela m'est également arrivé lorsque j'ai essayé de déployer mon application ASP.NET MVC sur AppHarbor.

J'avais un paquet de feuilles de style avec le nom

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

et la structure des dossiers était

-- Contenu

- Contenu \ Bootstrap \ ...

En changeant simplement le nom du bundle en "~/Content/bootstrap-css"mon problème, il a été résolu.

Yasser Shaikh
la source
15

Je sais que j'ai 4 ans de retard sur cette question, mais cela a fonctionné pour moi.

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

   BundleTable.EnableOptimizations = true;     // Added this           
}
RayLoveless
la source
2
De toutes les réponses ci-dessus et ci-dessous. C'est le seul qui a fonctionné pour moi.
Haim Katz
3
Cela permet des optimisations lorsque vous êtes en mode débogage. Bien que ce soit un excellent moyen de vérifier si les bundles fonctionnent sur une machine de développement, vous ne devriez pas laisser cette instruction dans votre code.
Rudey
9

Erreur 403 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 dans le système de fichiers (par exemple C:\approot\Content\[script | css]) à la place[Script | Style]Bundle("~/content/[scriptDiff | cssDiff]")

yantaq
la source
2
Merci, c'est le problème que j'ai rencontré. Pour le résoudre, dans BundleConfig.cs, j'ai changé le chemin de @ Styles.Render ("~ / Content / css") à @ Styles.Render ("~ / bundles / css"). Maintenant, cela fonctionne lors de l'exécution locale en mode débogage et lors de la publication en mode version ou débogage.
Ken Palmer
Bonne réponse, mais vous ne devriez pas laisser seulement un lien, au moins les étapes de base de cet article seraient bien d'avoir ici, au cas où le site Web lié serait en panne.
Vitor M. Barbosa
5

J'ai résolu le problème en ajoutant la ligne de code ci-dessous dans la classe BundleConfig

BundleTable.EnableOptimizations = false;
Ye Yint
la source
3

Ce que je fais est très simple,

J'ajoute "js" à la fin de ScriptBundle comme ceci: new ScriptBundle ("~ / bundles / appjs") Et j'ajoute "css" à la fin de StyleBundle comme ceci: new StyleBundle ("~ / content / appcss")

Les noms de mes dossiers ne se terminent jamais par «js» ou «css».

Ça devrait le faire.

abelabbesnabi
la source
2

Cela s'applique également à la 'classe ScriptBundle', assurez-vous que le 'nom de paramètre' du constructeur ne correspond pas à un chemin dans le système de fichiers de l'application Web. N'oubliez pas qu'IIS essaiera de servir le fichier / la demande.

William
la source
1

Le problème peut également provenir du fichier crypté. Cela m'est venu à l'esprit lorsque j'ai téléchargé BootStrap et utilisé les fichiers fournis. Ils étaient verts dans l'explorateur Windows et fonctionnaient bien dans Visual Studio, mais une fois déployés, j'ai eu une erreur 403.

Vous pouvez voir s'ils sont chiffrés en accédant aux propriétés, puis aux propriétés avancées et il y a une case à cocher chiffrée.

Décochez et ce ne sera plus un problème.

Greg Gum
la source
0

J'ai le même problème avec cette erreur (403 Forbidden). Dans mon cas, la raison est que le serveur proxy de mon organisation bloque mon fichier css. Le nom du fichier CSS correspond à l'une des règles de blocage.

Konstantin Orlov
la source
0

J'ai découvert que le fichier bootstrap.css ne se trouvait pas dans le dossier de contenu, alors je l'ai cherché dans les packages et je l'ai collé là-bas .. cela a fonctionné!

Majid ALSarra
la source