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

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top