2009-08-29 5 views

Répondre

4

Si je comprends bien la question, vous voulez chercher le chemin de droite web.config?

Si oui, ce que vous cherchez probablement est quelque chose comme ceci:

string p = null; 
System.Web.Configuration.HttpHandlersSection httpHandlersSection = 
    (System.Web.Configuration.HttpHandlersSection) 
     System.Configuration.ConfigurationManager.GetSection("system.web/httpHandlers"); 

foreach (System.Web.Configuration.HttpHandlerAction handler in httpHandlersSection.Handlers) 
{ 
    if(handler.Type == "myType") 
    { 
     p = handler.Path; 
     break; 
    } 
} 

L'astuce est l'instruction if ici. Les gestionnaires de web.config n'ont pas de "noms" amicaux que vous pouvez utiliser comme clé. Tout ce qu'ils ont sont des types (qui peuvent être des chaînes laides), des chemins, et le verbe. Pour localiser le gestionnaire spécifique qui vous intéresse, vous devrez peut-être rechercher dans le type ou le chemin du gestionnaire une sous-chaîne connue qui identifie le gestionnaire spécifique que vous souhaitez trouver.

+0

C'est une solution plutôt correcte mais indirecte (selon les standards .NET). Ce serait très bien s'il y avait une sorte de localisateur de service standard du framework qui pourrait être mappé à HttpHandlers pour faciliter l'interfaçage à partir de modules séparés. Quelque chose à considérer, je dirais! –

+1

En règle générale, il est inhabituel pour le code utilisateur d'avoir besoin d'examiner les composants internes de la configuration de l'application à ce niveau. De plus, il y a des gestionnaires qui sont intégrés et d'autres qui sont enregistrés via la configuration au niveau de la machine. Ensuite, il existe des HttpHandlerFactories qui enregistrent dynamiquement les gestionnaires à la demande. Entre la nature dynamique des gestionnaires et les considérations de sécurité potentielles, je peux voir pourquoi il n'y a pas beaucoup d'accès direct à ces objets. –

+1

Pour ceux qui avaient le même mal de tête que j'ai fait, rappelez-vous, la casse "system.web/httpHandlers" est sensible à la casse. Cela signifie que le "H" dans Handlers est une capitale. –

0

Dans le contexte actuel de http utiliser la propriété de chemin de l'objet de demande

0

Si vous êtes intéressé par le chemin d'accès au gestionnaire traitement de la demande actuelle:

string path = HttpContext.Current.Handler.GetType().Assembly.CodeBase; 

Si vous est arrivé de savoir où trouver une collection des autres instances de gestionnaire, vous pouvez utiliser la même approche obtenir leurs chemins aussi bien.

+0

Je suis en train d'essayer de résoudre le "chemin virtuel" vers le gestionnaire, pas l'emplacement de la DLL elle-même. C'est à dire. si le type "MyHandler" est enregistré à "MyHandler.axd", je veux résoudre "MyHandler.axd". –