2017-05-15 4 views
2

Meine Web.Config.xml Datei ist eine Reihe von unterstützten Erweiterungen für HTTP-Anforderungen von Clients konfiguriert. Diese Anfragen werden von der gleichen HttpHandler Implementierung behandelt. Ich verwende die Erweiterungen, um die Funktionalität im Handler zu aktivieren. Unten ist eine Kopie der Struktur.Abrufen einer Liste der konfigurierten HttpHandlers

<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> 

Ich mag einen fünften Handler implementieren, so dass Kunden eine anfängliche Anfrage machen können die unterstützten Pfade (Funktionalität) zu bekommen, so dass sie nicht zu machen Anfragen werden versuchen, die nicht unterstützt werden. Ich möchte die aktivierte Funktionalität durch Hinzufügen/Entfernen von Handlern steuern.

Wie kann ich eine Liste der konfigurierten Handler-Laufzeit in meiner Handler-Implementierung erhalten?

Ich möchte die Liste verwenden, um meine Antwort zu konstruieren.

Ich habe mir System.Web.Configuration.HttpHandlersSection angesehen, aber wenn ich versuche, system.webServer Abschnitt zu bekommen, bekomme ich ein System.Configuration.IgnoreSection Objekt zurück.

+0

einen Blick auf diese https://msdn.microsoft.com/en-us/library/ms151434(v=vs.110) .aspx –

+0

@ S.Petrosov Es scheint, dass das system.webServer -Element nicht von "WebConfigurationManager.GetSection" unterstützt wird. Es gibt ein System.Configuration.IgnoreSection-Objekt zurück. –

Antwort

0

fand ich, dass die system.webServer/handlers zu lesen, können Sie die

Microsoft.Web.Administration.dll

anstelle von System.Configuration verweisen müssen.

Die DLL befindet sich im Ordner \ windows \ system32 \ inetsrv, wenn Sie die IIS-Verwaltungskonsole in Windows-Funktionen aktiviert haben.

enter image description here

Hier ist ein Code Beispiel:

/// <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(); 
    } 
} 
Verwandte Themen