2011-01-04 8 views
3

Ich bin vertraut mit der Verwendung eines HttpModule zu Zeitanforderungen, aber diese Haken nicht wirklich in ASP.NET MVC-View-System. Kann dies getan werden, indem man irgendwo in global.asax einen Timer startet und dann in _layout.cshtml darauf zugreift?Wie können Sie Zeitanforderungen mit ASP.NET MVC?

Antwort

3

1) Sie können die Startzeit überprüfen und Endzeit einer Anfrage in Begin_Request und End_Request Ereignisse der Anwendungsklasse 2) Sie können ein benutzerdefiniertes HttpModule definieren 3) Sie können ein benutzerdefiniertes Attribut wie folgt definieren:

public class RequestTimerAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     //Mark the Start Time 
       MarkTime("Start"); 
    } 

    public override void OnResultExecuted(ResultExecutedContext filterContext) 
    { 
     //Mark the Start Time 
       MarkTime("End"); 
    } 

    void MarkTime(string EventName) 
    { 
     //Handle the logic here to log the time 
    }   
} 
+0

Interessanter Ansatz - wusste nicht über dieses Attribut. Können Sie HTML (dh die Ausführungszeit) in die aktuelle Antwort von OnResultsExecuted überschreiben? –

+0

Habe das nicht versucht ... Sollte möglich sein, denke ich ... – Chandu

+1

Der sauberste Weg, dies zu tun wäre, es ViewData in OnResultExecuting hinzuzufügen, so dass es von der Ansicht gerendert werden kann. Offensichtlich wird das die Renderzeit der Ansicht nicht einschließen, aber alles, was möglicherweise zeitaufwendig ist, sollte sowieso im Controller sein. –

1

Ich verwende die Initialize Methode der Steuerung ein Flag in HttpContext.Items zu setzen:

HttpContext.Items["StartTime"] = DateTime.Now; 

Dann ist es aus Ihrer Sicht drucken, oder wo auch immer:

<% 
// We only set this in DEBUG builds 
var startTime = HttpContext.Current.Items["StartTime"] as DateTime? 
if(startTime.HasValue) 
{ %> 
    <%=(DateTime.Now - startTime.Value).TotalSeconds.ToString("0.00000")%> seconds 
<% 
} 
%> 
+0

@ downvoter Gibt es etwas falsch mit diesem Code? – kevingessner