2017-05-15 3 views
2

Mon Le fichier Web.Config.xml est configuré pour un ensemble d'extensions prises en charge pour les requêtes http des clients. Ces demandes sont gérées par la même implémentation HttpHandler. J'utilise les extensions pour activer la fonctionnalité dans le gestionnaire. Voici une copie de la structure.Obtention d'une liste de HttpHandlers configurés

<system.webServer> 
    <handlers accessPolicy="Read, Execute, Script">   
     <add name="Handler1" path="*.path1" verb="*" type="namespace.class, assembly" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" /> 
     <add name="Handler2" path="*.path2" verb="*" type="namespace.class, assembly" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" /> 
     <add name="Handler3" path="*.path3" verb="*" type="namespace.class, assembly" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" /> 
     <add name="Handler4" path="*.path4" verb="*" type="namespace.class, assembly" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" /> 
    </handlers>   
</system.webServer> 

Je souhaite mettre en œuvre un 5 gestionnaire afin que les clients peuvent faire une demande initiale pour obtenir les chemins pris en charge (fonctionnalité), de sorte qu'ils ne chercheront pas à faire des demandes qui ne sont pas prises en charge. Je souhaite contrôler la fonctionnalité activée en ajoutant/supprimant des gestionnaires.

Comment puis-je obtenir une liste des gestionnaires configurés dans mon implémentation Handler?

Je souhaite utiliser la liste pour construire ma réponse.

J'ai regardé System.Web.Configuration.HttpHandlersSection mais quand j'essaye d'obtenir la section system.webServer, j'obtiens un objet System.Configuration.IgnoreSection en arrière.

+0

Jetez un oeil à ce https://msdn.microsoft.com/en-us/library/ms151434(v=vs.110) .aspx –

+0

@ S.Petrosov Il semble que l'élément system.webServer n'est pas supporté par "WebConfigurationManager.GetSection". Il renvoie un objet System.Configuration.IgnoreSection. –

Répondre

0

Je trouve que pour lire le system.webServer/handlers, vous devez faire référence à la

Microsoft.Web.Administration.dll

à la place de System.Configuration. La DLL se trouve dans le dossier \ windows \ system32 \ inetsrv lorsque vous avez activé la console de gestion IIS dans les fonctionnalités Windows.

enter image description here

Voici quelques exemples de code:

/// <summary> 
/// Returns a list of configured handler names 
/// </summary> 
/// <param name="filter">the handler name must contain this value to be included in the list</param> 
/// <returns>a list of handler names that matches the filter or all handler names if filter is null</returns> 
public static List<string> GetHandlerNames(string filter) 
{ 
    string websiteName = System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName(); 
    Configuration o = srvMgr.GetWebConfiguration(websiteName); 
    ConfigurationElementCollection c1 = o.GetSection("system.webServer/handlers").GetCollection(); 

    if (filter != null) 
    { 
     return c1.Where(x => x.GetAttribute("name").Value.ToString().ToLowerInvariant().Contains(filter.ToLowerInvariant())).Select(x => x.GetAttributeValue("name").ToString()).ToList(); 
    } 
    else 
    { 
     return c1.Select(x => x.GetAttributeValue("name").ToString()).ToList(); 
    } 
} 


/// <summary> 
/// Returns a list of configured handler paths 
/// </summary> 
/// <param name="filter">the handler name must contain this value to be included in the list</param> 
/// <returns>a list of handler paths that matches the filter or all handler paths if filter is null</returns> 
public static List<string> GetHandlerPaths(string filter) 
{ 
    string websiteName = System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName(); 
    Configuration o = srvMgr.GetWebConfiguration(websiteName); 
    ConfigurationElementCollection c1 = o.GetSection("system.webServer/handlers").GetCollection(); 

    if (filter != null) 
    { 
     return c1.Where(x => x.GetAttribute("name").Value.ToString().ToLowerInvariant().Contains(filter.ToLowerInvariant())).Select(x => x.GetAttributeValue("path").ToString().Replace("*.", "")).ToList(); 
    } 
    else 
    { 
     return c1.Select(x => x.GetAttributeValue("path").ToString()).ToList(); 
    } 
}