2008-09-13 5 views
0

Ich möchte eine ISAPI-Filter-ähnliche Funktion implementieren, die HttpModule in IIS7 verwendet, das unter IIS Integrated Request Processing Pipeline-Modus ausgeführt wird.IIS Integrierte Anforderungsverarbeitungs-Pipeline - Anforderung ändern

Ziel ist es, die eingehende Anfrage auf Web-Server-Ebene zu betrachten und einige benutzerdefinierte HttpHeader in die Anfrage einzufügen. (for ex: HTTP\_EAUTH\_ID)

Und später in der Seite Lebenszyklus einer ASPX-Seite, soll ich in der Lage sein, diese Variable zu verwenden, wie

string eauthId = Request.ServerVariables["HTTP\_EAUTH\_ID"].ToString(); 

So dieses Modul auf der Webserver Ebene der Umsetzung ist es möglich, die Servervariables-Kollektion zu ändern ??

Antwort

3

HttpRequest.ServerVariables Eigenschaft ist eine schreibgeschützte Sammlung. Sie können das also nicht direkt ändern. Ich würde empfehlen, Ihre benutzerdefinierten Daten in httpcontext (oder globalen Anwendungsobjekt oder Ihre Datenbank) von Ihrem httpmodul zu speichern und dann diesen freigegebenen Wert in der aspx-Seite zu lesen.

Wenn Sie weiterhin Servervariablen ändern möchten, gibt es eine Hack-Technik, die in dieser thread mit Reflection erwähnt wird.

0

Ich glaube, die Server-Variablen-Liste enthält nur die Header vom Browser an den Server gesendet.

0

Sie können weder die HttpRequest.Headers noch die HttpRequest.ServerVariables Sammlung ändern. Sie werden zu einem jedoch in der Lage sein, auf Ihre Daten zu heften.

HttpContext.Current.Items 
HttpContext.Current.Response.Headers 

Leider Request.Params, Request.QueryString, Request.Cookies, Request.Form (und fast jedem anderen Ort Sie es stopfen denken würde nur gelesen wird

würde ich stark rate davon ab, Reflektionen zu verwenden, wenn es sich um ein HttpModule handelt, das Sie in IIS 7 installieren möchten Da dieser Code (potentiell) für jede Anfrage benötigt wird, die den Webserver durchläuft, muss er wirklich schnell und einfach sein wird es nicht schneiden (es sei denn, Sie haben sehr wenige Benutzer).

Viel Glück!