2009-04-02 6 views
9

Desidero registrare un HttpHandler per includere tutte le sottocartelle di una cartella radice indipendentemente da quanto sono in basso. Mi sarei aspettato il comportamento con il codice qui sotto per fare proprio questo, ma in realtà include solo gli elementi direttamente nella cartella principale.Come registrare HttpHandler per tutte le sottocartelle in Asp.Net?

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

posso ovviamente registrarsi come di seguito per includere tutto ciò che è secondo livello, tuttavia devono ancora incontrare un modo per dire qualsiasi cosa al di sotto della radice.

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

Questo è qualcosa che mi ha infastidito per un po 'e mi piacerebbe sentire una soluzione semplice.

Vorrei chiarire che quando dico "root" non intendo la radice dell'applicazione e non sono necessariamente interessato a inviare tutte le richieste nell'applicazione a un modulo da elaborare.

risposta

0

Forse dovresti usare HttpModule invece di HttpHandler.

+0

Questa è sempre un'opzione, ma non ho bisogno del gestore per tutte le richieste nell'applicazione solo per tutte le richieste al di sotto di una cartella specifica. Potrei non essere stato chiaro nella mia domanda, per "root" non intendo la radice del sito solo di quel ramo nell'albero delle cartelle. – YonahW

6

È possibile creare web.config in questa cartella "root" con percorso = "*"

+1

è un'ottima idea anche se nel mio caso sto trattando con un url che non corrisponde ad una cartella. – YonahW

19

Non hai bisogno di un web.config separata. Utilizzare la posizione <> nel web.config primario:

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

È davvero fantastico. Mai saputo di questo elemento, grazie per la condivisione. – YonahW

+0

Questo ha fatto il trucco! Molte grazie! – Allov

+0

Questa dovrebbe essere la risposta accettata! – ssougnez

0

è possibile creare un modulo http che controlla l'url per ogni richiesta in arrivo. Se la richiesta di URL è in ogni cartella che si desidera che il gestore gestire, lo fa:

  • Mettere il pieno, URL originale nel Context.Items
  • Modificare il percorso della richiesta di un certo valore fittizio immediatamente al di sotto la cartella del gestore, che corrisponde alla configurazione del gestore.

Il gestore sarà ora chiamato, e troverà l'url manichino nella richiesta. Ignora questo URL e elabora l'url effettivo che troverà in Context.Items.