145 votes

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

J'exécute une application sur app harbor écrite en MVC4.

Un paquet 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="stackoverflow.com/Content/css/home/basic-jquery-slider.css" rel="stylesheet"/>
<link href="stackoverflow.com/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="stackoverflow.com/Content/css/home?v=zhVOIpUNuvCOZhJyBcQWpMlozayor4te6k-pM29wHqI1" rel="stylesheet"/>

Lorsque je consulte ce lien dans le href J'obtiens 403 - Interdit : L'accès est refusé.

Comment résoudre ce problème ?

0 votes

Je ne sais pas si vous avez résolu ce problème, mais cet article a résolu le mien. stackoverflow.com/a/18474844/955831

287voto

Paul Points 7328

Je pense que le chemin Content/css existe sur le disque dans votre application. Dans ce cas, c'est IIS qui gère la requête, et non MVC.

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

Extrait des commentaires :

"Une bonne convention à suivre lorsque "bundle" comme préfixe dans le nom du paquet. Cela permet d'éviter un éventuel conflit de routage."

2 votes

Merci. Est-il normal qu'il fonctionne lorsqu'il est exécuté dans le localhost ?

3 votes

Merci pour cette réponse - je devenais fou !

8 votes

@RicardoPolo, par "localhost", voulez-vous dire en l'exécutant sur iis express sur votre machine de développement ? Alors oui, c'est normal que cela fonctionne car vous êtes probablement en mode debug, ce qui désactive le bundling.

46voto

CDeutsch Points 1643

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

Il existe deux solutions à ce problème (vous ne devez en faire qu'UNE)

A) Supprimer les extensions des noms des lots. (recommandé) Cela permettra à .NET de traiter la demande et de l'exécuter par l'intermédiaire du module BundleModule.

B) Ajoutez ceci à votre web.config dans la section system.webServer qui fera en sorte que .NET exécute les requêtes .js et .css par l'intermédiaire du BundleModule.

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

Un grand bravo à Ray Moro qui a trouvé 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

0 votes

Mise à jour avec plus d'informations sur la cause première et une deuxième option.

1 votes

J'avais ce problème parce que le nom de mon bundle était un nom de dossier se terminant par "css". Bien que mon bundle n'ait pas exactement d'extension de fichier, la suggestion A m'a conduit au problème.

1 votes

Ceci devrait être la bonne réponse, elle m'a aidé à résoudre le même problème.

9voto

yantaq Points 142

Erreur 403 résolue. Voici une explication détaillée et une solution pour l'erreur 403.
La solution est démontrée pour la liasse CSS. Cependant, elle s'applique également à JavaScript.

http://www.mvccentral.net/Story/Details/articles/kahanu/stylebundle-403-error-solved

En bref, assurez-vous que le chemin virtuel [Script | Style]Bundle("~/content/[script | css]") ne correspond pas à un dossier du système de fichiers (par ex. C:\approot\Content\[script | css] ) au lieu de [Script | Style]Bundle("~/content/[scriptDiff | cssDiff]")

2 votes

Merci, c'est le problème que j'ai rencontré. Pour le résoudre, dans BundleConfig.cs, j'ai changé le chemin d'accès de @Styles.Render("~/Content/css") à @Styles.Render("~/bundles/css"). Cela fonctionne maintenant en local en mode débogage et lors de la publication en mode release ou débogage.

0 votes

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, dans le cas où le site Web lié est en panne.

3voto

sandman Points 96

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 du StyleBundle comme suit : new StyleBundle("~/content/appcss")

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

Cela devrait suffire.

2voto

William Ovuaku Points 51

Cela s'applique également à la classe "ScriptBundle", assurez-vous que le "nom du 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X