19 votes

MVC4 Bundles renvoie 404

J'ai un projet qui fonctionne avec bundling lorsque vous l'exécutez à partir de Visual Studio. Cependant, après avoir effectué un déploiement, le gestionnaire de regroupement ne semble jamais prendre la route. Il finit par aller vers le gestionnaire de fichiers statiques à la place, qui renvoie une réponse 404.

Des idées ? Je vois l'assemblage d'optimisation dans le bin du site web sous IIS.

Il utilise le pool d'applications 4.0 et le mode intégré.

Je me demande si quelqu'un a des idées ou des suggestions ?

Gracias

----- mise à jour basée sur les questions -----

VS2012

cibleFramework="4.5"

J'ai également ajouté du code dans la vue pour montrer quels modules ont été chargés et je peux voir le module bundle listé ici.

BundleConfig est la valeur par défaut fournie lors de l'utilisation du modèle de projet Internet Application MVC4.

Le site est en cours de déploiement dans la Racine. C'est étrange car lorsque je définis EnableOptimizations = true (en raison de l'exécution en mode débogage via Visual Studio F5), tout fonctionne parfaitement ! Je peux naviguer vers le contenu/css et il sort le css combiné.

Je l'ai déployé et tout le reste fonctionne, mais le regroupement !

26voto

user2320070 Points 111

Je viens de rencontrer (et de résoudre) ce problème.

Assurez-vous que le chemin virtuel de votre bundle ne peut pas être confondu avec un répertoire existant ou un nom de fichier réel. Dans mon cas, je l'avais codé comme :

bundles.Add(new ScriptBundle("~/bundles/main.js").Include( ...

Mais quand je l'ai changé en

bundles.Add(new ScriptBundle("~/bundles/main").Include( ... 

tout a commencé à fonctionner.

13voto

xinqiu Points 431

Réponse actualisée le 17/11/2013 Cela est dû au fait que le routage MVC par défaut ne gère que les * au lieu des * . *, c'est-à-dire que le fichier applicationhost.config d'IIS ou d'IIS Express contient ce qui suit :

            <add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />

Donc pour contourner ce problème, nous pouvons ajouter ce qui suit au web.config :

      <system.webServer>
        <handlers>      
          <add name="UrlRoutingHandler" 
               type="System.Web.Routing.UrlRoutingHandler, 
                     System.Web, Version=4.0.0.0, 
                     Culture=neutral, 
                     PublicKeyToken=b03f5f7f11d50a3a" 
               path="/bundles/*" 
               verb="GET"/>      
        </handlers>
      </system.webServer>

Pour plus d'informations, vous pouvez consulter les documents suivants : http://weblogs.asp.net/owscott/archive/2013/01/16/handing-mvc-paths-with-dots-in-the-path.aspx ASP.NET MVC Route Url supportant (point)

Vieille mauvaise réponse : Fondamentalement, le DOT n'est généralement pas autorisé dans le chemin virtuel lorsque IIS analyse les URL. Voici a Lien a mentionné le paramètre URLScan AllowDotInPath suivant : Par défaut, cette option est définie à 0. Si cette option est définie à 0, URLScan rejette toute requête qui contient plusieurs points (.). Cela permet d'éviter les tentatives de dissimulation des demandes d'extensions de nom de fichier dangereuses en plaçant une extension de nom de fichier sûre dans les informations sur le chemin ou la partie chaîne de requête de l'URL. Par exemple, si cette option est définie sur 1, URLScan peut autoriser une requête pour http:// nom_serveur/BadFile.exe/SafeFile.htm parce qu'il l'interprète comme une requête pour une page HTML, alors qu'il s'agit en fait d'une requête pour un fichier exécutable (.exe) avec le nom d'une page HTML dans la zone PATH_INFO. Lorsque cette option est définie sur 0, URLScan peut également refuser les demandes concernant les répertoires contenant des points.

5voto

vineel Points 1524

Même moi, j'ai eu la même erreur. Ajout de <modules runAllManagedModulesForAllRequests="true" /> sous <system.webServer> dans le fichier web.config a résolu le problème.

0voto

chaitu301 Points 69

J'ai eu le même problème même avec l'exemple d'application MVC. J'ai vu que le modèle par défaut regroupe la feuille de style avec un nom css que je suppose que IIS n'aime pas, ce qui entraîne une erreur 404.

Le fait de changer le nom du paquet de css en APPCSS résout le problème pour moi.

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