2009-04-02 9 views
9

Je souhaite enregistrer un HttpHandler pour inclure tous les sous-dossiers d'un dossier racine, quelle que soit la profondeur de leur imbrication. Je m'attendais à ce que le comportement avec le code ci-dessous le fasse, mais en fait, il ne comprend que des éléments directement dans le dossier racine.Comment enregistrer HttpHandler pour tous les sous-dossiers dans Asp.Net?

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

Je peux d'inscrire bien sûr comme ci-dessous pour inclure tout ce qui est le deuxième niveau, ont cependant encore de rencontrer une façon de dire quoi que ce soit juste en dessous de la racine.

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

Ceci est quelque chose qui me dérange depuis longtemps et j'aimerais entendre parler d'une solution simple.

Je voudrais préciser que lorsque je dis "root" je ne parle pas de la racine de l'application et je ne suis pas nécessairement intéressé par l'envoi de toutes les requêtes de l'application à un module à traiter. Peut-être que vous devriez utiliser HttpModule au lieu de HttpHandler.

Répondre

0

+0

Ceci est bien sûr toujours une option, mais je n'ai pas besoin du gestionnaire pour toutes les demandes dans l'application, juste pour toutes les demandes sous un dossier spécifique. Je pourrais avoir été peu clair dans ma question, par "racine" je ne veux pas dire la racine du site juste de cette branche dans l'arborescence des dossiers. – YonahW

6

Vous pouvez créer web.config dans ce dossier « racine » avec path = « * »

+1

c'est une bonne idée bien que dans mon cas, j'ai affaire à une URL qui ne correspond pas à un dossier. – YonahW

19

Vous n'avez pas besoin d'un web.config séparé. Utilisez l'emplacement <> dans votre web.config primaire:

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

C'est plutôt cool. Je n'ai jamais connu cet élément, merci pour le partage. – YonahW

+0

Cela a fait l'affaire! Merci beaucoup! – Allov

+0

Cela devrait être totalement la réponse acceptée! – ssougnez

0

Vous pouvez créer un http le module qui vérifie l'URL pour chaque requête entrante. Si l'URL de requête est dans un dossier que vous voulez que votre gestionnaire à gérer, il le fait:

  • Mettez plein, url originale Context.Items
  • Modifiez le chemin de la requête à une valeur fictive immédiatement au-dessous le dossier du gestionnaire, correspondant à la configuration du gestionnaire.

Le gestionnaire sera maintenant appelé, et il trouvera l'URL factice dans la demande. Il ignore cette URL et traite l'URL réelle qu'il trouvera dans Context.Items.

Questions connexes