¿Qué es routes.IgnoreRoute (“{resource} .axd / {* pathInfo}”)

¿Qué es routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

No puedo encontrar ningún archivo .axd en mi proyecto. ¿Puedo eliminar esta regla de ruta?

Los archivos .axd no existen físicamente. ASP.NET usa URLs con extensiones .axd (ScriptResource.axd y WebResource.axd) internamente, y son manejadas por un HttpHandler.

Por lo tanto, debe mantener esta regla para evitar que ASP.NET MVC intente gestionar la solicitud en lugar de permitir que lo haga el HttpHandler dedicado.

La ruta con el patrón {resource} .axd / {* pathInfo} se incluye para evitar que las solicitudes de los archivos de recursos Web, como WebResource.axd o ScriptResource.axd, se pasen a un controlador.

Enlace de lectura: http://msdn.microsoft.com/en-us/library/cc668201%28v=vs.100%29.aspx

También puede especificar que el enrutamiento no debe manejar ciertas solicitudes de URL. Evita que el enrutamiento maneje ciertas solicitudes definiendo una ruta y especificando que la clase StopRoutingHandler se debe usar para manejar ese patrón. Cuando un objeto StopRoutingHandler maneja una solicitud , el objeto StopRoutingHandler bloquea cualquier procesamiento adicional de la solicitud como una ruta. En cambio, la solicitud se procesa como una página ASP.NET, un servicio web u otro punto final ASP.NET. Puede usar el método RouteCollection.Ignore (o RouteCollectionExtensions.IgnoreRoute para aplicaciones MVC) para crear rutas que usen la clase StopRoutingHandler .

Algunos antecedentes

Si abre este archivo:

 %WINDIR%\Microsoft.NET\Framework\version\Config\Web.config 

lo encontrarás dentro del archivo:

  

Eso es básicamente contar el tiempo de ejecución de Asp.NET: “Hola amigo de asp.net, si viene una solicitud para WebResource.axd, entonces use AssemblyResourceLoader para procesar la solicitud”.

Tenga en cuenta que WebResource.axd NO es un archivo, sino simplemente un mapa (si se me permite) de AssemblyResourceLoader . Es el nombre bajo el cual se registra el controlador. En mi máquina, encontré los siguientes manejadores .axd:

     

Bien, entonces, ¿qué hace ese controlador?

AssemblyResourceLoader sabe cómo buscar archivos incrustados dentro de un ensamblaje para que pueda servirlo (enviarlo al cliente, es decir, un navegador). Por ejemplo, en los formularios web asp.net, si usa los controles de validación, dependen de algunos javascript para mostrar los errores en la página web. Sin embargo, ese javascript está incrustado en un ensamblaje. El navegador necesita el javascript para que pueda verlo en el html de la página:

  

AssemblyResourceLoader encontrará el ensamblado donde está incrustado el javascript utilizando la información en la cadena de consulta y devuelve el javascript.


Volver a la pregunta

Entonces, para responder la pregunta, ¿qué es?

routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

Eso le dice al motor de enrutamiento que no procesaremos aquellas solicitudes que coincidan con ese patrón de ruta. En otras palabras, no procesaremos solicitudes .axd . ¿Por qué? Porque MVC en sí es un HttpHandler similar a .axd y .aspx y muchos otros controladores que están en el archivo web.config. El controlador MVC no sabe cómo procesar la solicitud, como buscar recursos incrustados en un ensamblado, el AssemblyResourceLoader sabe cómo hacerlo. MVC sabe cómo hacer, así todo lo que hace que está más allá del scope de esta pregunta y respuesta.

Aquí hay un gran artículo que explica .axd en más detalles.

Esos no son archivos (no existen en el disco); solo son nombres bajo los cuales se registran algunos controladores HTTP.