Frage

Ich möchte eine ISAPI -Filterfunktion mit HTTPModule in IIS7 implementieren, die im IIS Integrated Request Processing Pipeline -Modus ausgeführt wird.

Ziel ist es, die eingehende Anforderung auf Webserverebene zu betrachten und einige benutzerdefinierte HTTPheader in die Anforderung zu injizieren. (for ex: HTTP\_EAUTH\_ID)

Und später auf dem Seitenlebenszyklus einer ASPX -Seite sollte ich diese Variable als verwenden können

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

Wenn Sie dieses Modul auf Webserverebene implementieren, ist es möglich, die Servervariables -Sammlung zu ändern?

War es hilfreich?

Lösung

Httprequest.servervariables Eigenschaft ist eine schreibgeschützte Sammlung. Sie können das also nicht direkt ändern. Ich würde empfehlen, Ihre benutzerdefinierten Daten in zu speichern httpcontext (oder globales Anwendungsobjekt oder Ihre Datenbank) von Ihrem HTTPModule und dann diesen gemeinsam genutzten Wert auf der ASPX -Seite.

Wenn Sie immer noch Servervariablen ändern möchten, wird darin eine Hack -Technik erwähnt Faden Verwenden von Reflexion.

Andere Tipps

Ich glaube, die Liste der Servervariablen enthält nur die vom Browser an den Server gesendeten Header.

Sie werden auch nicht in der Lage sein, die zu ändern HttpRequest.Headers oder der HttpRequest.ServerVariables Sammlung. Sie werden jedoch in der Lage sein, Ihre Informationen an eines von Folgendes zu übernehmen:

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

Leider, Request.Params, Request.QueryString, Request.Cookies, Request.Form (Und fast jeder andere Ort, an dem Sie an Stuffing denken würden, ist nur gelesen.

Ich würde dringend davon abhalten, Reflection zu verwenden, wenn dies ein httpmodule ist, das Sie in IIS 7 installieren möchten. Angesichts der Tatsache, dass dieser Code (potenziell) jede Anfrage, die den Webserver überläuft, aufgerufen wird, muss er sehr schnell sein und die Reflexion wird ihn einfach nicht reduzieren (es sei denn, Sie haben nur sehr wenige Benutzer).

Viel Glück!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top