Я знаком с использованием HttpModule для запросов времени, но на самом деле они не подключаются к системе представления ASP.NET MVC. Можно ли это сделать, запустив таймер где-нибудь в global.asax, а затем получив доступ к нему в _layout.cshtml?Как вы можете запросить время с помощью ASP.NET MVC?
3
A
ответ
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
}
}
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
Интересный подход - не знал об этом атрибуте. Можете ли вы вставить HTML (т.е. время выполнения) в текущий ответ от переопределения OnResultsExecuted? –
Не пробовал, что ... Должно быть возможно, я думаю ... – Chandu
Самый чистый способ сделать это - добавить его в ViewData в OnResultExecuting, чтобы его можно было визуализировать с помощью представления. Очевидно, что это не будет включать время рендеринга представления, но в любом случае все, что может потребовать времени, должно быть в контроллере. –