2011-01-04 2 views
3

Я знаком с использованием HttpModule для запросов времени, но на самом деле они не подключаются к системе представления ASP.NET MVC. Можно ли это сделать, запустив таймер где-нибудь в global.asax, а затем получив доступ к нему в _layout.cshtml?Как вы можете запросить время с помощью ASP.NET MVC?

ответ

3

1) Вы можете проверить время начала и время завершения запроса в событиях Begin_Request и End_Request класса приложения 2) Вы можете определить пользовательский HttpModule . 3) Вы можете определить пользовательский атрибут следующим образом:

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

Интересный подход - не знал об этом атрибуте. Можете ли вы вставить HTML (т.е. время выполнения) в текущий ответ от переопределения OnResultsExecuted? –

+0

Не пробовал, что ... Должно быть возможно, я думаю ... – Chandu

+1

Самый чистый способ сделать это - добавить его в ViewData в OnResultExecuting, чтобы его можно было визуализировать с помощью представления. Очевидно, что это не будет включать время рендеринга представления, но в любом случае все, что может потребовать времени, должно быть в контроллере. –

1

Я использую Initialize метод контроллера, чтобы установить флаг в HttpContext.Items:

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

Затем распечатать его на вашем взгляде, или там, где:

<% 
// 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 Что-то не в порядке с этим кодом? – kevingessner

Смежные вопросы