Il bundle MVC ritorna un errore HTTP 403
Mi è capitato, su un progetto MVC, che uno dei bundle CSS, quando compilato in release, ritornasse un codice di errore HTTP 403.
Il bundle che dava errore era questo:
l'errore era di access denied (HTTP 403).
In pratica, esisteva una cartella fisica, nel sito, che aveva come indirizzo /Content/css, lo stesso percorso assegnato al bundle, quindi giustamente veniva impedito l'accesso alla cartella.
Per risolvere è bastato usare un percorso non esistente su file system:
quindi la soluzione è stata cambiare il percorso da ~/Content/css a ~/bundles/css.
Ovviamente lo stesso errore potrebbe capitare anche su un bundle JavaScript.
Il bundle che dava errore era questo:
C#
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/css/jquery.bxslider.css",
"~/Content/css/Sito.css",
"~/Content/fonts/fontawesome/css/all.min.css"
));
In pratica, esisteva una cartella fisica, nel sito, che aveva come indirizzo /Content/css, lo stesso percorso assegnato al bundle, quindi giustamente veniva impedito l'accesso alla cartella.
Per risolvere è bastato usare un percorso non esistente su file system:
C#
bundles.Add(new StyleBundle("~/bundles/css").Include(
...
));
La keyword bundles è solo una convenzione, si può usare qualunqe convenzione, l'importante è che non coincida con un percorso su file system, ad esempio: "~/non/e/un/percorso"
ovviamente va aggiornata anche la pagina cshtml dove viene richiamatoHTML
@Styles.Render("~/bundles/css")
<!--
oppure se si vuole passare un parametro in query string per invalidare
la cache del browser ogni volta che si fa un rilascio con un nuovo numero di versione
-->
@Styles.RenderFormat(@"<link href=""{0}?" + Model.AppVersion + @""" rel=""stylesheet"">", "~/bundles/css")
Ovviamente lo stesso errore potrebbe capitare anche su un bundle JavaScript.