Регистрация активности пользователя в приложении ASP.NET MVC
Есть ли хорошая стратегия для регистрации активности пользователя в приложении ASP MVC? (ActionFilters/HTTPModules).
Что-то вроде последней активности пользователя (так же, как StackOverflow "Seen 23 mins ago" ), и даже того, что использовались "Страницы" и "Контроллеры", и еще больше нажал на кнопки и ссылки.
У меня установлен ELMAH, но насколько я знаю его только для регистрации ошибок.
PD: Google Analytics не является вариантом.
Ответы
Ответ 1
Вы можете попробовать использовать PostSharp, чтобы выполнить регистрацию для вас, это многофункциональная функция может пригодиться для чего-то как это. Если это не вариант, то модуль, вероятно, будет проще всего реализовать (предполагая, что вы можете получить требуемую информацию пользователя в этой точке в конвейере).
Ответ 2
Предупреждение: это было написано в 2009 году для MVC.NET RC1 и может больше не быть синтаксически правильным.
Атрибуты фильтра действий идеально подходят для этого, просто вызовите [YourAttributeName]
в верхней части вашего контроллера (или, если у вас есть контроллер приложения, от которого наследуются другие контроллеры, он нужен вам только один раз в приложении).
Например:
namespace the_name_space
{
[Log]
public class ApplicationController : Controller
{
С этого момента этот атрибут будет вызываться до того, как каждое действие будет запущено в вашем контроллере (ах), вы также можете указать это только для действия, вызвав [Log]
непосредственно перед ним тем же способом.
Чтобы получить требуемую функциональность регистрации, вы, скорее всего, захотите переопределить OnResultExecuting
и OnResultExecuted
, оба из которых довольно OnResultExecuted
.
Например:
public class LogAttribute : ActionFilterAttribute
{
protected DateTime start_time;
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
start_time = DateTime.Now;
}
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
RouteData route_data = filterContext.RouteData;
TimeSpan duration = (DateTime.Now - start_time);
string controller = (string)route_data.Values["controller"];
string action = (string)route_data.Values["action"];
DateTime created_at = DateTime.Now;
//Save all your required values, including user id and whatnot here.
//The duration variable will allow you to see expensive page loads on the controller, this can be useful when clients complain about something being slow.
}
}
Ответ 3
Я просто наткнулся на эти 2 сообщения Rion Williams, которые описывают очень простой способ сделать это:
Реализация контрольных путей с использованием ASP.NET MVC ActionFilters
Создание расширенных аудитов с использованием ActionFilters в ASP.NET MVC
Расширенный пост действительно замечательный, поскольку вы можете хранить данные запроса и дополнительно фильтровать эти данные.
Я реализую это прямо сейчас в своем приложении.
Ответ 4
Идея @Rory отличная. PostSharp - это именно то, что вам нужно для этого, вы можете подумать о его объединении с Мониторинг работоспособности ASP.net