Esta es el arreglo más completa que te podemos dar, sin embargo estúdiala pausadamente y analiza si se adapta a tu trabajo.
Solución:
Advertencia: esto se escribió en 2009 para MVC .NET RC1 y es posible que ya no sea sintácticamente correcto.
Los atributos de filtro de acción son perfectos para esto, simplemente llame a [YourAttributeName]
en la parte superior de su controlador (o si tiene un Controlador de aplicaciones del que heredan sus otros controladores, solo lo necesita una vez en su aplicación).
Por ejemplo:
namespace the_name_space
{
[Log]
public class ApplicationController : Controller
{
A partir de este momento este attribute se llamará antes de que se ejecute cada acción en su (s) controlador (es), también puede especificar esto en solo una acción llamando [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
los cuales son bastante autoexplicativos.
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.
Me topé con estas 2 publicaciones de Rion Williams que describen una forma muy sencilla de hacer esto:
Implementación de seguimientos de auditoría con ASP.NET MVC ActionFilters
Creación de registros de auditoría avanzados mediante filtros de acción 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.
Puede intentar usar un aspecto de PostSharp para realizar el registro por usted, su funcionalidad de transmisión múltiple podría ser útil para algo así. Si no es una opción, entonces un módulo probablemente sea el más fácil de implementar (suponiendo que pueda obtener la información de usuario requerida en ese punto de la canalización).
Si crees que te ha resultado de provecho nuestro post, sería de mucha ayuda si lo compartes con el resto programadores de esta forma nos ayudas a dar difusión a esta información.