web-dev-qa-db-fra.com

Lien css fourni une erreur 404

J'essaie de faire en sorte que le regroupement fonctionne dans ASP.NET MVC 4. Je reçois une erreur 404 à partir du lien généré pour le CSS fourni. J'ai fait ce qui suit:

  1. Installé le package "Microsoft ASP.NET Web Optimization Framework" via NuGet (v4.0.20710.0)

  2. Création d'une classe BundleConfig dans le répertoire App_Start avec le contenu suivant:

    using System.Web.Optimization;
    namespace BsdAppTemplate.Web_Nancy.App_Start
    {
        public class BundleConfig
        {
            public static void RegisterBundles(BundleCollection bundles)
            {
                bundles.Add(new StyleBundle("~/bundles/styles/cvi").Include(
                    "~/mainstyles.css"
                ));
            }
        }
    }
    
  3. Ajout de ce qui suit à Web.config à la racine du site:

    <system.web>
        <compilation debug="false" targetFramework="4.5" />
    
        <pages>
          <namespaces>
            <add namespace="System.Web.Optimization"/>
            ...
          </namespaces>
        </pages>
    </system.web>
    
  4. Ajout de ce qui suit à l'élément head de mon fichier de mise en page MVC:

     @Styles.Render("~/bundles/styles/cvi")
    
  5. Copié le fichier CSS référencé dans BundleConfig ("mainstyles.css") dans le répertoire racine de mon projet Web.

Lorsque je visualise la source d'un fichier rendu, je peux voir que le lien apparaît sous la forme:

<link href="/bundles/styles/cvi" rel="stylesheet"/>

Ce lien génère un 404 lors de la navigation ou de l'affichage de la demande de page dans l'onglet Réseau de Chrome.

J'ai également essayé l'équivalent sur un formulaire Web, mais j'obtiens le même résultat (404) à partir du lien généré lorsque j'ajoute:

<%: Styles.Render("~/bundles/styles/cvi") %>
21
rogersillito

Il semble que vous ayez oublié l'étape dans laquelle vous appliquez votre configuration en appelant RegisterBundles dans Application_Start:

protected void Application_Start()
{
    ...
    BundleConfig.RegisterBundles(BundleTable.Bundles);
    ...
}

Habituellement, dans les cas où la classe BundleConfig est déjà présente (en tant que partie du modèle de projet ou créée par le package NuGet lors de l'installation), cet appel est également déjà présent.

Vous devez également savoir que la classe BundleConfig sert à séparer les problèmes et à maintenir le Application_Start vierge. Dans des cas simples, rien ne vous empêche d’enregistrer des ensembles directement dans Application_Start:

protected void Application_Start()
{
    ...
    BundleTable.Bundles.Add(new StyleBundle("~/bundles/styles/cvi").Include("~/mainstyles.css"));

    ...
}
25
tpeczek

Vous avez trouvé cette question via Google résultats, mais le problème dans mon cas était que Windows 2008 en avait besoin dans web.config pour fonctionner lorsque la compilation debug = false. 

<system.webServer>
  <modules>
    <add name="BundleModule" type="System.Web.Optimization.BundleModule" />
  </modules>
</system.webServer>

Cela fonctionnait bien sur la machine de développement Win7 sans cela.

60
fiat

J'ai eu le même problème que mon paquet de script a soudainement répondu avec 404. J'ai une solution similaire à @fiat répondre que j'ai trouvé sur cet article de blog

La solution consistait à supprimer et à ajouter la variable BundleModule dans la section de la partie modules de la section system.webServer.

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

J'ai le même problème (dans ASP.Net webform), j'ai résolu mon problème avec Ignore "bundles /" route dans Global.asax:

routeCollection.Ignore("bundles/{*catch}");
2
mohsen najafzadeh

Tous les noms de mes lots commençant par "~/bundles/..." sont introuvables dans mon WebAPI . Ajout de la ligne à ma classe RouteConfig.cs

    routeCollection.Ignore("bundles/{*catch}");

résolu mon problème.

0
Florian SANTI