2009-08-20 2 views
1

Um die Ausführungszeit der an meine mvc-Anwendungen gesendeten Anfragen zu schätzen, habe ich log4net verwendet, um die Zeit zu protokollieren, die im EndRequest-Ereignis von global.asax für meine MVC-Anwendung verstrichen ist. Das EndRequest wird jedoch für jede Anforderung aufgerufen, einschließlich der Ressourcen (css, images); Ich würde lieber zwischen den beiden Arten von Anfragen unterscheiden können.asp.net mvc: Ist diese Anfrage weitergeleitet oder nicht?

Gibt es eine Möglichkeit, weitergeleitete Anfragen von statischen Inhaltsanforderungen zu trennen? Sollte ich diesen Hooking-Spot aufgeben und die Ausführung an einem anderen Punkt im Code ablaufen lassen?

Antwort

1

leite ich in der Regel all meine Controller von einer ControllerBase Klasse, in denen ich den notwendigen Holzeinschlag in der OnActionExecuting und OnActionExecuted Methode überschreibt einfügen.

Dies gibt mir eine zentrale Stelle, um die Protokollierung für alle meine Controller-Aktionen + mehr Zeug, die in der Regel alle meine Aktion Methoden in allen meinen Controllern angehäuft haben würde.

+0

Ich wollte dies nicht zuerst tun, aber es ist wirklich die Straße mit weniger Reibung an diesem Punkt im Projekt – samy

+0

muss es sein einfachste und pragmatischste Art zu erreichen, was Sie wollen ... natürlich könnten einige Leute denken, dass das Logging aufdringlich ist, weil es jetzt Teil jedes Controllers ist, aber dann könnten Sie den Code einfach zu einem Action-Attribut hinzufügen und das Attribut setzen auf dem Basiscontroller – mookid8000

1
+1

Dieser ist ein reines Gold. :) –

+0

Wenn ich folge dem Code des Phil Haack, was er tut, ist: - registrieren die Routen - jede Route-Handler mit einem überschreiben, die eine bestimmte Httphandler zurückgibt, die dann gibt die fest codierten HTML-Seite bei jeder Anfrage I sehe nicht wirklich, wie ich die Ausführungszeit haken sollte, die sich dort anmeldet. Was ich tun könnte, ist: - Erstellen Sie einen httphandler, der Anfangs- und Endanfragen protokolliert - ersetzen Sie den Routehandler in jeder betroffenen Route durch einen roadhandler, der die Protokollierung httphandler austeilt, aber es scheint kaum die Mühe wert, da ich tun kann, was Mookid vorgeschlagen unter ... vermisse ich etwas? – samy

+0

Sorry über die schreckliche Formatierung oben, die Textarea aß meine Bruchlinien ... – samy