2015-08-28 5 views
5

Ich erstelle ein HTTPModul, das einige Male wiederverwendet werden kann, aber mit anderen Parametern. Betrachten Sie als Beispiel ein Anforderungs-Redirector-Modul. Ich könnte einen HTTPHandler verwenden, aber es ist keine Aufgabe dafür, weil mein Prozess auf Anforderungsebene arbeiten muss, nicht auf einer Extension/Path-Ebene.Erhalten HTTPModule eigene Parameter in web.config?

Anyways, würde Ich mag meine web.config auf diese Weise haben:

<system.webServer> 
    <modules> 
     <add name="tpl01" type="TemplateModule" arg1="~/" arg2="500" />  
     <add name="tpl02" type="TemplateModule" arg1="~/" arg2="100" />  
    </modules> 
</system.webServer> 

Aber die meisten Informationen, die ich war this finden konnten. Ich sage, ja, ich kann das ganze <modules> Tag erhalten, aber wie weiß jede Instanz meines HTTPModules welche Argumente zu nehmen? Wenn ich den Namen (tpl01 oder tpl02) bei der Erstellung bekommen könnte, könnte ich seine Argumente später namentlich nachschlagen, aber ich habe keine Eigenschaft in der HTTPModule-Klasse gesehen, um das zu bekommen.

Jede Hilfe wäre wirklich willkommen. Danke im Voraus! :)

+0

HttpModuleCollection hat eine AllKeys-Eigenschaft. Für jeden Schlüssel, den Sie erhalten können (Schlüssel) und überprüfen Sie, ob die Rückkehr Ihrem Modul entspricht dies, um den Namen Ihres Moduls zu bestimmen. –

Antwort

-1

Dies ist eine Abhilfe für das Problem sein könnte.

Zunächst definieren Ihr Modul mit Feldern für das, was Sie von außen einstellen müssen:

public class TemplateModule : IHttpModule 
{ 
    protected static string _arg1; 
    protected static string _arg2; 

    public void Init(HttpApplication context) 
    { 
     _arg1 = "~/"; 
     _arg2 = "0"; 

     context.BeginRequest += new EventHandler(ContextBeginRequest); 
    } 

    // ... 
} 

Dann aus Ihrem Web-App, müssen jedes Mal, wenn Sie das Modul mit einem anderen Satz von diesen Werten verwenden, Erben Sie das Modul und überschreiben Sie die Felder:

public class TemplateModule01 : Your.NS.TemplateModule 
{ 
    protected override void ContextBeginRequest(object sender, EventArgs e) 
    { 
     _arg1 = "~/something"; 
     _arg2 = "500"; 

     base.ContextBeginRequest(sender, e); 
    } 
} 

public class TemplateModule02 : Your.NS.TemplateModule 
{ 
    protected override void ContextBeginRequest(object sender, EventArgs e) 
    { 
     _arg1 = "~/otherthing"; 
     _arg2 = "100"; 

     base.ContextBeginRequest(sender, e); 
    } 
} 
+0

Dies ist nur ein schrecklicher Fehler, der auf den Rennzustand wartet. Erstellen Sie eine neue virtuelle Methode in der Basisklasse und rufen Sie diese mit verschiedenen Argumenten aus den untergeordneten Klassen auf. Verwenden Sie keine statischen Felder, um Argumente zu übergeben, das ist albern. –

2

Ich denke, dieser Teil von config (system.webServer \ modules \ add) ist nicht dazu gedacht, Parameter an Module zu übergeben (zu speichern), sondern um eine Liste von Modulen zu registrieren, um eine Anfrage zu bearbeiten.

Für mögliche atttributes in "add" Elemente sehen - https://msdn.microsoft.com/en-us/library/ms690693(v=vs.90).aspx

Verwandte Themen