ASP.NET MVC y Custom Http Handlers

Publicado 20/5/2009 14:57 por Eduard Tomàs i Avellana

Hola! ¿Como va todo?

Un post rapidito… Imaginad que creais un Custom Handler para procesar determinadas peticiones en vuestra aplicación ASP.NET MVC:

    public class CardImagesHandler : IHttpHandler
    {
        #region IHttpHandler Members
        public bool IsReusable
        {
            get { return false; }
        }
        public void ProcessRequest(HttpContext context)
        {
            // ...
        }
        #endregion
    }

Luego, lo añadís en el web.config, para que os procese todas las URLs con extensión .portrait:

<add verb="GET" path="*.portrait" 
type="WofWeb.Code.CardImagesHandler"/>

Finalmente probáis alguna URL con extensión portrait, tal y como http://localhost:8080/prueba.portrait i veis que vuestro Custom Http Handler es vilmente ignorado…

¿Por qué? Pues porque ASP.NET MVC toma control de todas las URLs, por lo que intentará procesar esta URL aunque hayamos definido un Custom Http Handler para ella. ¿La solución? En la tabla de enrutamiento indicar que queremos que se ignoren las URL con .potrait, de esta manera serán procesadas por nuestro Custom Http Handler…

… tan sencillo como añadir:

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

en global.asax donde configuremos la tabla de enrutamiento!

Saludos!

Archivado en:
Comparte este post:

Comentarios

# re: ASP.NET MVC y Custom Http Handlers

Wednesday, May 20, 2009 4:31 PM by preguntoncojonero

En qué método del global.asax se incluye

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

???????

saludos

# re: ASP.NET MVC y Custom Http Handlers

Wednesday, May 20, 2009 5:15 PM by Eduard Tomàs i Avellana

Hola preguntoncojonero :)

La llamada a IgnoreRoute se pone cuando se configura la tabla de enrutamiento, generalmente dentro del Application_Start de global.asax.

El propio Visual Studio, cuando creas un proyecto ASP.NET MVC incluye el siguiente código en global.asax:

protected void Application_Start()

{

   RegisterRoutes(RouteTable.Routes);

}

public static void RegisterRoutes(RouteCollection routes)

{

    // Aqui colocamos la llamada a routes.IgnoreRoute

}

Saludos!!!!!

# re: ASP.NET MVC y Custom Http Handlers

Wednesday, May 20, 2009 8:48 PM by Anonimo

Aunque eso funciona, no es la solución apropiada ni ideal. Estás ignorando algo muy obvio, las rutas.