2009-04-02 31 views
9

Me gustaría registrar un HttpHandler para incluir todas las subcarpetas de una carpeta raíz independientemente de cuán abajo estén anidadas. Hubiera esperado que el comportamiento con el siguiente código hiciera justamente eso, pero de hecho solo incluye elementos directamente en la carpeta raíz.¿Cómo registrar HttpHandler para todas las subcarpetas en Asp.Net?

<httpHandlers> 
    <add verb="*" path="root/*" type="HandlerType, Assembly" /> 
</httpHandlers> 

me puedo registrar, por supuesto, de la siguiente manera para incluir todo lo que es de segundo nivel, sin embargo, todavía tienen que encontrar una manera de simplemente decir nada por debajo de la raíz.

<httpHandlers> 
    <add verb="*" path="root/*/*" type="HandlerType, Assembly" /> 
</httpHandlers> 

Esto es algo que me ha estado molestando durante bastante tiempo y me gustaría saber de una solución simple.

Me gustaría aclarar que cuando digo "raíz" no me refiero a la raíz de la aplicación y no estoy necesariamente interesado en enviar todas las solicitudes en la aplicación a un módulo para su procesamiento.

Respuesta

0

Quizás debería usar HttpModule en lugar de HttpHandler.

+0

Esto es, por supuesto, siempre una opción, pero no necesito el controlador para todas las solicitudes en la aplicación solo para todas las solicitudes debajo de una carpeta específica. Puede que no haya estado claro en mi pregunta, por "raíz" no me refiero a la raíz del sitio solo de esa rama en el árbol de carpetas. – YonahW

6

Puede crear web.config en esta carpeta "raíz" con la ruta = "*"

+1

es una gran idea, aunque en mi caso estoy tratando con una URL que no coincide con una carpeta. – YonahW

19

No es necesario un web.config separada. Utilizar el> elemento < ubicación en el web.config principal:

<!-- Configuration for the "root" subdirectory. --> 
<location path="root"> 
    <system.web> 
    <httpHandlers> 
     <add verb="*" path="root" type="HandlerType, Assembly"/> 
    </httpHandlers> 
    </system.web> 
</location> 
+0

Eso es genial. Nunca supe sobre este elemento, gracias por compartir. – YonahW

+0

¡Eso hizo el truco! ¡Muchas gracias! – Allov

+0

¡Esta debería ser la respuesta correcta! – ssougnez

0

Se puede crear un módulo HTTPque comprueba la dirección URL para cada petición entrante. Si la solicitud de URL está en cualquier carpeta que desea que su manejador de manejar, lo hace:

  • Ponga la, url original completa en Context.Items
  • Cambiar la ruta de solicitud a un valor ficticio inmediatamente debajo la carpeta del manejador, que coincide con la configuración del manejador.

El manejador se llamará ahora, y que se encuentra la URL ficticia en la solicitud. Ignora esta url y procesa la url real que encontrará en Context.Items.

Cuestiones relacionadas