Журнал активности пользователей в приложении ASP.NET MVC
-
10-07-2019 - |
Вопрос
Есть ли хорошая стратегия для регистрации активности пользователей в приложении ASP MVC? (ActionFilters / HTTPModules).
Что-то вроде последнего пользовательского действия (точно так же как StackOverflow " просмотрено 23 минуты назад "), и даже какие страницы и контроллеры использовались, и еще больше указывает, какие кнопки или ссылки были нажаты.
У меня установлен ELMAH, но, насколько я знаю, это только для регистрации ошибок.
PD: Google Analytics не вариант.
Решение
Вы можете попробовать использовать PostSharp , чтобы выполнить ведение журнала для вас. пригодиться для чего-то подобного. Если это не вариант, то модуль, вероятно, будет проще всего реализовать (при условии, что вы можете получить необходимую информацию о пользователе в этой точке конвейера).
Другие советы
Предупреждение: это было написано в 2009 году для MVC .NET RC1 и, возможно, больше не является синтаксически правильным.
Действие Атрибуты фильтра идеально подходят для этого, просто вызовите [YourAttributeName]
в верхней части вашего контроллера (или если у вас есть контроллер приложений, от которого наследуются другие контроллеры, вам нужно только это один раз в вашем приложении).
Например:
namespace the_name_space
{
[Log]
public class ApplicationController : Controller
{
С этого момента этот атрибут будет вызываться до того, как каждое действие будет запущено в контроллере (ах), вы также можете указать это только для действия, вызвав [Log]
непосредственно перед ним в такая же мода.
Чтобы получить необходимую вам функцию ведения журнала, вы, скорее всего, захотите переопределить OnResultExecuting
и 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.
}
}
Я только что наткнулся на эти 2 сообщения Рион Уильямс , в которых описан очень простой способ сделать это: р>
Реализация контрольных журналов использование ASP.NET MVC ActionFilters
Создание расширенных контрольных журналов с использованием ActionFilters в ASP.NET MVC
Предварительный пост действительно хорош, поскольку вы можете хранить данные запроса и дополнительно фильтровать эти данные.
Я реализую это прямо сейчас в моем приложении.
@ Идея Рори превосходна. PostSharp - это как раз то, что вам нужно для этого, вы можете подумать о том, чтобы соединить его с ASP.net. Мониторинг здоровья