Pregunta

¿Existe una buena estrategia para registrar la actividad del usuario en una aplicación ASP MVC? (ActionFilters / HTTPModules).

Algo parecido a la última actividad del usuario (como StackOverflow " Visto hace 23 minutos "), e incluso qué páginas y controladores se usaron, y presionando aún más en qué botones o enlaces se hizo clic.

Tengo instalado ELMAH pero, por lo que sé, es solo para el registro de errores.

PD: Google Analytics no es una opción.

¿Fue útil?

Solución

Puede intentar usar un aspecto PostSharp para realizar el registro por usted, su funcionalidad de multidifusión podría Es útil para algo así. Si no es una opción, entonces un Módulo probablemente sería el más fácil de implementar (suponiendo que pueda obtener la información de usuario requerida en ese punto de la tubería).

Otros consejos

  

Advertencia: esto se escribió en 2009 para MVC .NET RC1 y es posible que ya no sea sintácticamente correcto.

Acción Los atributos de filtro son perfectos para esto, solo llame a [YourAttributeName] en la parte superior de su controlador (o si tiene un controlador de aplicación del que heredan sus otros controladores, solo necesita una vez en su aplicación).

Por ejemplo:

namespace the_name_space
{
    [Log]
    public class ApplicationController : Controller
    {

Desde este punto en adelante, este atributo se llamará antes de que cada acción se ejecute en su (s) controlador (es), también puede especificar esto en solo una acción llamando a [Log] justo antes de hacerlo en el misma moda.

Para obtener la funcionalidad de registro que necesita, lo más probable es que desee anular OnResultExecuting y OnResultExecuted , los cuales son bastante explicativos.

Por ejemplo:

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.
    }
}

Acabo de encontrarme con estas 2 publicaciones de Rion Williams que describen una forma muy sencilla de hacer esto:

Implementación de pistas de auditoría utilizando ASP.NET MVC ActionFilters

Crear senderos de auditoría avanzados utilizando ActionFilters en ASP.NET MVC

La publicación avanzada es realmente excelente, ya que puede almacenar los datos de la solicitud y filtrar aún más esos datos.

Implementaré esto ahora mismo en mi aplicación.

La idea de @ Rory es excelente. PostSharp es justo lo que necesita para esto, puede considerar combinarlo con ASP.net Monitoreo de salud

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top