Frage

Ich erhalte diese Ausnahme, wenn ich den Zugriff versuchen, das Objekt HttpContext.Current.Request.

Ich habe die Antworten in l1 gesehen, l2 und l3 ... so. .. meine Frage ist dann:

Für das, was in der Welt ist IHttpModules jetzt?

Ich wollte ein Modul entwickeln, die jedes Mal, wenn ein Anruf ein, um may Website getroffen werden, so dass ich die URL zugegriffen anmelden kann, die Nutzer-IP-Adresse, etc ..., aber jetzt scheint es, ich kann es nicht mehr in IIS7 . Gibt es eine Abhilfe? (Außer Schalter auf "Classic Mode").

alt text http://userserve-ak.last.fm/serve /126/24432467.jpg

Prost.

War es hilfreich?

Lösung

Wenn tun Sie das? in einem Modul Veranstaltung ist es? Es sollte auch in einem integrierten Pool perfekt machbar sein. Bottom-Line gibt es Änderungen, wie ASP.NET Hooks zu IIS, wenn im integrierten Modus ausgeführt wird, dass es „mehr First-Class“ macht. Dies bedeutet, dass bestimmte Ereignisse vor Feuer, zum Beispiel Application_Start wird nun Feuer außerhalb des Kontexts einer tatsächlichen Anfrage. Andere Beispiele erwarten eine Windows-authentifizierte Identität in der Beginrequest haben, da jetzt Beginrequest auch geschieht, bevor IIS authentifiziert, was nicht der Fall in der Vergangenheit war.

Wenn Ihre Anwendung auf dem alten schlechte Verhalten hängt können Sie immer noch Ihre AppPool ändern im klassischen Modus ausgeführt werden, und es wird gut funktionieren.

Es sollte möglich sein, den Antrag in Notifikationen zu ergreifen, die Anforderung spezifisch sind wie Beginrequest, Endrequest, PostAuthorizeRequest usw. Auch ich würde empfehlen, gegen die Verwendung von HttpContext.Current seit diesem wird eine zusätzliche Optik in einer Hash-Tabelle und in der Regel können Sie den Kontext direkt auf andere Weise, insbesondere im Kontext eines Moduls, so zum Beispiel, wenn Sie den Beginrequest Griff, Sie sollten in der Lage sein, zu tun:

    HttpApplication application = (HttpApplication)sender;  
    HttpContext context = application.Context;  

und Sie werden die Lookup speichern.

Aus Ihrer Beschreibung klingt es wie ein Modul umsetzen soll, dass Griffe Beginrequest und Endrequest und Sie sollten in Ordnung sein.

Andere Tipps

Ich stellte dies ursprünglich als Kommentar weil es nicht wirklich eine Antwort ist, aber dann sah ich, dass sie eine „Arbeit um“ suchen, so ist hier meine Idee einer Arbeit um.

/App_Code/BasePage.vb

 Public Class BasePage : Inherits System.Web.UI.Page
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ''# Do all your logging here
    End Sub
 End Class

/Default.aspx.vb

Partial Class _Default : Inherits BasePage
    ''# This is simply your code behind for each page (notice it inherits BasePage)
    ''# You can still have your Page_Load events along with custom methods in here, 
    ''# and it will not affect the logging portion of your app.
End Class

Im Grunde, was Sie tun, ist eine einzige Klasse zu schaffen, die die gleiche Arbeit auf jeder Seite geladen wird, egal welche Seite geladen wird. Dann wird jede Seite in der Anwendung aus der BasePage Klasse, um erben werden, um es zu aktivieren.

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