web-dev-qa-db-fra.com

Échec du chargement de la ressource: 403 interdit avec l'optimisation .js

J'essaie de réduire mes fichiers .js et .css.

J'ai installé le Install-Package Microsoft.AspNet.Web.Optimization emballé

Quand j'active l'optimisation avec BundleTable.EnableOptimizations = true;

Je reçois cette erreur sur le client:

Échec du chargement de la ressource: le serveur a répondu avec un statut de 403 (interdit) http://localhost:22773/Content/themes/elevation/v=gnDLBbf1VVRuQDXtIYn1q0P3ICZG7oiwwgxPRbaLvqI1

Quelqu'un a une idée de ce que je fais mal?

--- Info BundleConfig -------------------------------

 public class BundleConfig
{
    public static void RegisterBundles(BundleCollection bundles)
    {
        BundleTable.EnableOptimizations = true;

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

           "~/Scripts/jquery-1.9.1.js",
          "~/Scripts/jquery-ui-1.10.1.custom.js",
            "~/Scripts/jquery.signalR-1.0.1.js",
            "~/Scripts/signalr-hubs.js",
            "~/Scripts/Controls/Select/Simple/jquery.ui.selectmenu.js"
        ));


        bundles.Add(new ScriptBundle("~/bundles/shared").Include(
            "~/Scripts/global/prototypes.js",
            "~/Scripts/global/mathutil.js",
            "~/Scripts/global/elevationevents.js"
            ));


        bundles.Add(new ScriptBundle("~/bundles/core").Include(
            "~/Scripts/elevation/core/sys.config.js",
            "~/Scripts/elevation/core/bays.js",
            "~/Scripts/elevation/core/door.js",
            "~/Scripts/elevation/core/horiziontal.js",
            "~/Scripts/elevation/core/vertical.js"));


        bundles.Add(new StyleBundle("~/Content/themes/elevation").Include(
            "~/Content/themes/dialogs/dialogs.css",
            "~/Content/themes/social/ac/acSocial.css",
            "~/Content/themes/elevation/elevation.css"
      ));
    }
}

----------------------------- Je n'ai toujours pas compris ceci ------------- --------

J'utilise 2013 .net et iis8 sur un système d'exploitation Windows7

Voici ma dernière erreur, je ne peux pas sortir ma solution du mode débogage, car si je reçois l'erreur ci-dessous.

    HTTP Error 403.14 - Forbidden
The Web server is configured to not list the contents of this directory.

Most likely causes:
A default document is not configured for the requested URL, and directory browsing is not enabled on the server.

Things you can try:
If you do not want to enable directory browsing, ensure that a default document is configured and that the file exists.
Enable directory browsing.
Go to the IIS Express install directory.
Run appcmd set config /section:system.webServer/directoryBrowse /enabled:true to enable directory browsing at the server level.
Run appcmd set config ["SITE_NAME"] /section:system.webServer/directoryBrowse /enabled:true to enable directory browsing at the site level.
Verify that the configuration/system.webServer/directoryBrowse@enabled attribute is set to true in the site or application configuration file.

Detailed Error Information:
Module     DirectoryListingModule
Notification       ExecuteRequestHandler
Handler    StaticFile
Error Code     0x00000000
Requested URL      http://localhost:1499/Content/themes/elevation/?v=aukmuLTC3g_fDko3eWmzqq7A8miRqgsJKXA2GO3w-pg1
Physical Path      c:\users\administrator\documents\visual studio 2013\Projects\AlumCloud\AlumCloud\Content\themes\elevation\
Logon Method       Anonymous
Logon User     Anonymous
Request Tracing Directory      C:\Users\Administrator\Documents\IISExpress\TraceLogFiles\ALUMCLOUD(3)

More Information:
This error occurs when a document is not specified in the URL, no default document is specified for the Web site or application, and directory listing is not enabled for the Web site or application. This setting may be disabled on purpose to secure the contents of the server.
View more information »

Voici l'URL créée par iis8 lorsqu'elle n'est pas en mode débogage et qui génère l'erreur

http://localhost:1499/Content/themes/elevation/?v=aukmuLTC3g_fDko3eWmzqq7A8miRqgsJKXA2GO3w-pg1

Voici l'URL qui renvoie le fichier .css actuel sans erreur

http://localhost:1499/Content/themes/elevation/elevation.css

Je viens d'avoir le même problème. Dans mon cas, la solution consistait à attribuer un nom différent à l'ensemble de contenu. Je pense que cela se produit car IIS intercepte les demandes et traite le nom de l'ensemble comme un répertoire et, comme le dossier Content existe réellement, l'erreur renvoyée est renvoyée. Donc, vous pouvez renommer ~/Content/themes/elevation pour dire ~/css/themes/elevation

bundles.Add(new StyleBundle("~/css/themes/elevation").Include(
            "~/Content/themes/dialogs/dialogs.css",
            "~/Content/themes/social/ac/acSocial.css",
            "~/Content/themes/elevation/elevation.css"
      ));

De plus, n'oubliez pas d'ajuster votre page de balisage/maquette pour utiliser le nom de regroupement modifié, c'est-à-dire 

<%: Styles.Render("~/css/themes/elevation") %>

Ajoutez ensuite des directives d'emplacement au fichier web.config pour autoriser l'accès aux ensembles:

<location path="css">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="bundles">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>

J'espère que cela t'aides.

41
Denis Ivin

vous devez conserver le nom du bundle similaire au chemin d'accès réel aux ressources. sinon, le système ne peut pas trouver de ressources lorsqu'il est compilé avec debug='false' ou BundleTable.EnableOptimizations = true;. parce que le système utilise le nom du paquet pour générer le lien vers les ressources. donc vos noms de paquet devraient être comme ceci -

bundles.Add(new ScriptBundle("~/Scripts/myJquery").Include(
    "~/Scripts/jquery-1.9.1.js",
    "~/Scripts/jquery-ui-1.10.1.custom.js",
    "~/Scripts/jquery.signalR-1.0.1.js",
    "~/Scripts/signalr-hubs.js",
    "~/Scripts/Controls/Select/Simple/jquery.ui.selectmenu.js"
));

bundles.Add(new ScriptBundle("~/Scripts/global/shared").Include(
    "~/Scripts/global/prototypes.js",
    "~/Scripts/global/mathutil.js",
    "~/Scripts/global/elevationevents.js"
));

bundles.Add(new ScriptBundle("~/Scripts/elevation/core/core").Include(
    "~/Scripts/elevation/core/sys.config.js",
    "~/Scripts/elevation/core/bays.js",
    "~/Scripts/elevation/core/door.js",
    "~/Scripts/elevation/core/horiziontal.js",
    "~/Scripts/elevation/core/vertical.js"
));

bundles.Add(new StyleBundle("~/Content/themes/dialogs/dialog").Include(
    "~/Content/themes/dialogs/dialogs.css"
));

bundles.Add(new StyleBundle("~/Content/themes/social/ac/ac").Include(
    "~/Content/themes/social/ac/acSocial.css"
));

Edit Ceci fonctionnera sur IIS 6. Toutefois, pour IIS 7 ou 7.5, la solution est autre chose. J'ai rencontré le même problème lorsque j'ai déployé une application dans IIS 7.5. La solution consiste à installer un correctif, comme indiqué dans ASP.NET MVC 4 sur IIS7.5, renvoie 404. Le mappage de routage sans extension et ASP.NET 4.5 MVC 4 ne fonctionne pas sur Windows Server 2008 IIS 7

3
th1rdey3

Êtes-vous sûr que cela doit être réellement/altitude/v = gn ... mais pas/thèmes/élévation? V = gnDLBbf (avec? )

0
Agat

Comme indiqué dans la réponse acceptée, le nom de l'ensemble que vous avez attribué entre en conflit avec un dossier existant. A titre d'exemple, considérons les éléments suivants:

bundles.Add(new StyleBundle("~/content/epic").Include(
    "~/Content/Epic/StickyFooter.css"));

Me donnera le même type d'erreur noté par OP:

{myURL}/content/epic/?v=YTZL7Up6r-0uQblkv6unjKN5Nfb3uwtE0bPz9nxbjDc1 Failed to load 

Cela est dû au fait que le chemin virtuel que l’optimiseur tente de créer (contenu/epic) se trouve être un chemin de dossier existant sur mon site (j’ai un dossier dans la racine appelé "contenu" et qui contient un dossier appelé "épique"). . Si je change le chemin de mon paquetage comme suit:

bundles.Add(new StyleBundle("~/content/epic2").Include(
    "~/Content/Epic/StickyFooter.css"));

Le problème n'existe plus car je n'ai pas de dossier appelé "epic2" dans mon dossier "content".

Contrairement à la réponse acceptée, je vous déconseille de modifier un répertoire de paquetage tel que "~/Content/a/b /" en "~/css/a/b" car un autre problème potentiel se produira si vos feuilles de style contiennent des références relatives. vers des fichiers externes. 

Considérez ma feuille de style AjaxLoadAnimation.css qui contient cet extrait:

...
background: rgba( 255, 255, 255, .5 ) url('images/spin.gif') 50% 50% no-repeat;
...

Afin de vous assurer que la référence fonctionne pour une compilation optimisée et non optimisée, assurez-vous que le chemin d'accès à l'ensemble correspond au chemin d'accès pour chaque élément de l'ensemble. Si vos feuilles de style se trouvent dans ~/Content/my/path, votre ensemble devrait également commencer par ~/Content/my/path. Pour éviter tout problème avec OP, assurez-vous simplement que le nom ("sharedcss" dans mon cas) n’entre pas en conflit avec un dossier existant.

bundles.Add(new StyleBundle("~/Content/my/path/sharedcss").Include(
    "~/Content/my/path/bootstrap.css",
    "~/Content/my/path/font-awesome.css",
    "~/Content/my/path/AjaxLoadAnimation.css"));

J'espère que cela sauvera d'autres personnes de la même frustration.

0
Timothy Kanski