web-dev-qa-db-fra.com

Les bundles CSS du framework ASP.NET MVC 4.5 ne fonctionnent pas sur l'hébergement

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?

139
Ricardo Polo

À 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.

279
Paul

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

43
cdeutsch

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é.

19
Yasser

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           
}
12
RayLoveless

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]")

9
yantaq

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.

3
abelabbesnabi

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

BundleTable.EnableOptimizations = false;
2
Ye Yint

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.

2
William

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.

1
Greg Gum

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.

0
Konstantin Orlov

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é!

0
Majid ALSarra