asp.net-mvc - form - login asp net mvc c# sql server
Registrar la actividad del usuario en la aplicaciĆ³n MVC de ASP.NET (4)
¿Existe una buena estrategia para registrar la actividad del usuario en una aplicación ASP MVC? (ActionFilters / HTTPModules).
Algo como la última actividad del usuario (al igual que StackOverflow "Visto hace 23 minutos"), e incluso qué páginas y controladores se usaron, y presionando aún más qué botones o enlaces se hicieron clic.
He instalado ELMAH pero, por lo que sé, es solo para el registro de errores.
PD: Google Analytics no es una opción.
La idea de @Rory es excelente. PostSharp es justo lo que necesita para esto, puede considerar asociarlo con ASP.net Health Monitoring
Me topé con estas 2 publicaciones de Rion Williams que describen una manera muy sencilla de hacer esto:
Implementación de pistas de auditoría utilizando ASP.NET MVC ActionFilters
Creación de pistas de auditoría avanzadas utilizando ActionFilters en ASP.NET MVC
La publicación avanzada es realmente excelente, ya que puede almacenar los datos de la solicitud y filtrarlos aún más.
Voy a implementar esto ahora mismo en mi aplicación.
Podría intentar usar un aspecto PostSharp para realizar el registro por usted; su funcionalidad de PostSharp puede ser útil para algo así. Si no es una opción, entonces un Módulo probablemente sea el más fácil de implementar (asumiendo que puede obtener la información de usuario requerida en ese punto en la tubería).
Los Atributos del Filtro de Acción son perfectos para esto, simplemente coloque una llamada a [YourAttributeName]
en la parte superior de su controlador (o si tiene un Controlador de Aplicación del cual heredan sus otros controladores, solo lo necesita una vez en su aplicación).
Por ejemplo:
namespace the_name_space
{
[Log]
public class ApplicationController : Controller
{
Desde este punto en adelante, se llamará a este atributo antes de que se ejecute cada acción en su (s) controlador (es), también puede especificar esto en solo una acción llamando a [Log]
justo antes de él de la misma manera.
Para obtener la funcionalidad de registro que necesita, lo más probable es que desee anular OnResultExecuting
y OnResultExecuted
, ambos de los cuales se explican por sí mismos.
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.
}
}