Réponses:
Les fichiers .axd n'existent pas physiquement. ASP.NET utilise des URL avec des extensions .axd (ScriptResource.axd et WebResource.axd) en interne, et elles sont gérées par un HttpHandler.
Par conséquent, vous devez conserver cette règle pour empêcher ASP.NET MVC d'essayer de gérer la demande au lieu de laisser le HttpHandler dédié le faire.
IgnoreRoute
dans la configuration de routage de MVC est de s'assurer que MVC n'essaye pas de gérer la demande. En effet, les .axd
points de terminaison doivent être gérés par un autre gestionnaire HTTP (un gestionnaire qui ne fait pas partie de MVC) afin de servir les scripts.
Quelques Contexte
Si vous ouvrez ce fichier:
%WINDIR%\Microsoft.NET\Framework\version\Config\Web.config
vous trouverez ceci dans le fichier:
<add path="WebResource.axd"
verb="GET"
type="System.Web.Handlers.AssemblyResourceLoader"
validate="True" />
C'est essentiellement dire au runtime Asp.NET: "Hey mec asp.net, si une demande vient pour WebResource.axd alors utilisez AssemblyResourceLoader pour traiter la demande."
Veuillez noter que WebResource.axd n'est PAS un fichier mais simplement une carte (si je puis dire) vers AssemblyResourceLoader
. C'est le nom sous lequel le gestionnaire est enregistré. Sur ma machine, j'ai trouvé les gestionnaires .axd suivants:
<add path="eurl.axd" verb="*" type="System.Web.HttpNotFoundHandler" validate="True" />
<add path="trace.axd" verb="*" type="System.Web.Handlers.TraceHandler" validate="True" />
<add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="True" />
<add verb="*" path="*_AppService.axd"
Ok, alors que fait ce gestionnaire?
Le AssemblyResourceLoader
sait comment rechercher des fichiers incorporés dans un assemblage afin qu'il puisse le servir (l'envoyer au client c'est-à-dire un navigateur). Par exemple, dans les formulaires Web asp.net, si vous utilisez les contrôles de validation, ils dépendent de certains javascript pour afficher les erreurs sur la page Web. Cependant, ce javascript est intégré dans un assembly. Le navigateur a besoin du javascript donc vous verrez ceci dans le html de la page:
<script src="/YourSite/WebResource.axd?d=fs7zUa...&t=6342..." type="text/javascript"></script>
Le AssemblyResourceLoader
trouvera l'assembly dans lequel le javascript est incorporé en utilisant les informations de la chaîne de requête et retournera le javascript.
Retour à la question
Alors pour répondre à la question, qu'est-ce que c'est:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
Cela indique au moteur de routage que nous ne traiterons pas les demandes qui correspondent à ce modèle d'itinéraire. En d'autres termes, nous ne traiterons pas les .axd
demandes. Pourquoi? Parce que MVC lui-même est un HttpHandler similaire à .axd
and .aspx
et à de nombreux autres gestionnaires qui se trouvent dans le fichier web.config. Le gestionnaire MVC ne sait pas comment traiter la demande, comme la recherche de ressources incorporées dans un assembly, il AssemblyResourceLoader
sait comment le faire. MVC sait faire, bien tout ce qu'il fait qui dépasse le cadre de cette question et réponse.
La route avec le modèle {resource} .axd / {* pathInfo} est incluse pour empêcher les requêtes des fichiers de ressources Web tels que WebResource.axd ou ScriptResource.axd d'être transmises à un contrôleur.
Lire le lien: http://msdn.microsoft.com/en-us/library/cc668201%28v=vs.100%29.aspx
Vous pouvez également spécifier que le routage ne doit pas gérer certaines demandes d'URL. Vous empêchez le routage de gérer certaines demandes en définissant une route et en spécifiant que la classe StopRoutingHandler doit être utilisée pour gérer ce modèle. Lorsqu'une demande est gérée par un objet StopRoutingHandler , l' objet StopRoutingHandler bloque tout traitement supplémentaire de la demande en tant qu'itinéraire . Au lieu de cela, la demande est traitée en tant que page ASP.NET, service Web ou autre point de terminaison ASP.NET. Vous pouvez utiliser la méthode RouteCollection.Ignore (ou RouteCollectionExtensions.IgnoreRoute pour les applications MVC) pour créer des itinéraires qui utilisent la classe StopRoutingHandler .
Jetez un œil au lien ci-dessous: http://haacked.com/archive/2008/07/14/make-routing-ignore-requests-for-a-file-extension.aspx
Ce ne sont pas des fichiers (ils n'existent pas sur le disque) - ce ne sont que des noms sous lesquels certains gestionnaires HTTP sont enregistrés.