IgnoreRoute à ASP.MVC
-
21-09-2019 - |
Question
Je suis en train d'accéder à un fichier .js dans le répertoire de vues. J'ai une application MVC avec /Views/Home/MyControl.ascx J'ai /Views/Home/MyControl.js fichier js
Je voudrais faire référence au fichier .js et conservez-le avec le contrôle. J'ai essayé les entrées suivantes dans le routage, et aucun ne semble fonctionner.
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{file}.js");
routes.IgnoreRoute("{resource}.js/{*pathInfo}");
routes.IgnoreRoute("{controller}/{resource}.js/{*pathInfo}");
routes.IgnoreRoute("{*alljs}", new { alljs = @".*\.js(/.*)?" });
S'il vous plaît aider, s'il vous plaît ne suggèrent pas d'ajouter le fichier .js dans le répertoire des scripts. Je voudrais le faire fonctionner de cette façon, ou de savoir pourquoi il ne peut se faire.
Je mettrais le script dans la page, que le débogage de script est cassé dans VS2010 B2.
Merci Cordialement Craig.
La solution
Le dossier Views
est, bien pour les vues, et javascript doit être mis ailleurs. Voilà pourquoi les concepteurs du framework MVC mis un web.config
dans ce dossier Views
qui refuse l'accès à un fichier à l'intérieur. Vous pouvez modifier ce paramètre, mais soyez averti defaut que cela pourrait être un trou de sécurité potentiel. Donc, ouvrez le fichier web.config
situé dans le dossier et Views
:
Remplacer:
<httpHandlers>
<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
avec:
<httpHandlers>
<add path="*.aspx" verb="*" type="System.Web.HttpNotFoundHandler"/>
<add path="*.master" verb="*" type="System.Web.HttpNotFoundHandler"/>
<add path="*.ascx" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
Accédez à http://yoursite/Views/test.js
P.S. Vous pouvez également supprimer tous les IgnoreRoutes
que vous mettez dans global.asax
.
Autres conseils
Ne serait-ce pas une meilleure solution en utilisant la DefaultHttpHandler pour les ressources en html et en gardant le HttpNotFoundHandler pour tous les autres types de fichiers
<httpHandlers>
<add path="*.html" verb="*" type="System.Web.DefaultHttpHandler"/>
<add path="*.*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
En fait pour IIS mode intégré, vous devez utiliser System.Web.StaticHttpHandler
:
<httpHandlers>
<add path="*.css" verb="*" type="System.Web.StaticHttpHandler"/>
<add path="*.js" verb="*" type="System.Web.StaticHttpHandler"/>
<add path="*.*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
œuvres Apparemment System.Web.DefaultHttpHandler
en mode IIS classique uniquement.
MVC 4 I eu pour mettre à jour la section de gestionnaire ainsi que la section httpHandlers.
Je mis à jour le fichier web.config dans le dossier vues avec ce qui suit.
<httpHandlers>
<add path="*.aspx" verb="*" type="System.Web.HttpNotFoundHandler"/>
<add path="*.cshtml" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
<handlers>
<remove name="BlockViewHandler" />
<add name="BlockViewHandlerRazor" path="*.cshtml" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
<add name="BlockViewHandlerAspx" path="*.aspx" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>