Détecter les répertoires virtuels mis en correspondance à partir d'un IHttpModule dans un c # .NET

StackOverflow https://stackoverflow.com/questions/2216001

Question

J'ai un site .net qui contient un IHttpModule je l'ai écrit à faire certaines tâches (autorisation, etc.). Mais dans le site il y a un certain nombre de répertoires virtuels qui sont mis en correspondance avec des applications tierces qui, malheureusement, je ne peux pas changer ou déplacer (par exemple des forums de serveur communautaire, adxstudio CMS et d'autres).

Je cherche un moyen d'empêcher mon IHttpModule de courir lorsque les demandes sont faites pour le contenu de ces répertoires virtuels. Est-ce possible?

[Modifier - ajouté ce qui suit]

J'ai expérimenté avec l'ajout <remove name="X"/> à l'intérieur du nœud <httpModules> dans les fichiers web.config dans les applications de répertoire virtuel, mais il ne semble pas fonctionner dehors. Il est probablement pas une bonne solution, soit parce que les applications tierces peuvent être mis à jour, donc je ne veux pas d'exiger des modifications à leur code / configuration.

J'ai aussi essayé d'ajouter un <location path="." inheritInChildApplications="false"> autour de mon nœud <system.web> dans le web.config mère, mais cela ne semble pas aussi travailler.

[Modifier à nouveau - ajouté plus]

La raison est ne fonctionne pas parce que l'événement Init du IHttpModule est tiré seulement une fois par cycle de vie applicatif (plutôt que par la demande comme je l'avais supposé). Depuis que j'ajouter un groupe d'écouteurs d'événement dans l'événement init ceux-ci sont encore tirés sur les demandes suivantes ...

Était-ce utile?

La solution

Si vous avez une liste de ces répertoires et leurs chemins virtuels, vous pouvez construire une recherche d'entre eux.

Pour chaque HttpRequest qui déclenche votre module, vous pouvez vérifier le chemin virtuel pour voir si elle appartient à l'une du chemin dans la recherche. Si oui, vous pouvez ne rien faire ou quitter le code de votre module.

PS: Pour problème de performance, vous voulez probablement stocker la recherche dans l'état d'application (par exemple hashmap etc)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top