Log atividade do usuário sobre ASP.NET MVC Aplicação
-
10-07-2019 - |
Pergunta
Existe uma estratégia boa para o registro de atividades do usuário em um ASP MVC App? (ActionFilters / httpModules).
Algo como última atividade do usuário (como StackOverflow "Visto 23 horas atrás"), e até mesmo o Pages e controladores foram utilizados, e empurrando ainda mais que botões ou links foram clicados.
Eu tenho ELMAH instalado, mas, tanto quanto eu sei que é apenas para registro de erros.
PD:. Google Analytics não é uma opção
Solução
Você pode tentar usar um aspecto PostSharp para realizar o registro para você, é multi-cast funcionalidade poder vir a calhar para algo parecido. Se não for uma opção, em seguida, um módulo seria provavelmente o mais fácil de implementar (supondo que você pode obter as informações do usuário necessária nesse ponto no pipeline).
Outras dicas
Atenção:. Isto foi escrito em 2009 por MVC .NET RC1 e pode não ser mais sintaticamente correto
Ação filtro de Atributos são perfeitos para isso, basta colocar uma chamada para [YourAttributeName]
na parte superior do seu controlador (ou se você tiver um controlador de aplicação que seus outros controladores de herdar, você só precisa de uma vez em sua aplicação).
Por exemplo:
namespace the_name_space
{
[Log]
public class ApplicationController : Controller
{
A partir deste ponto em diante este atributo será chamado antes de cada ação é executada em seu controller (s), você também pode especificar isso em apenas uma ação, chamando [Log]
pouco antes da mesma forma.
Para obter a funcionalidade de registro que você precisa, você provavelmente irá querer OnResultExecuting
override e OnResultExecuted
, sendo que ambos são bastante auto-explicativo.
Por exemplo:
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.
}
}
Eu só tropeçou nessas 2 posts por Rion Williams que descrevem uma maneira muito simples de fazer isso:
Implementar trilhas de auditoria usando ActionFilters ASP.NET MVC
Criação de trilhas de auditoria avançadas utilizando ActionFilters em ASP.NET MVC
O posto avançado é realmente grande como você pode armazenar dados do pedido e ainda filtro que dados.
Vou implementar isso agora em meu aplicativo.
@ de Rory idéia é excelente. PostSharp é apenas o que você precisa para isso, você pode considerar acoplando-o com ASP.net Vigilância em saúde