Question

Existe-t-il une bonne stratégie pour consigner l'activité de l'utilisateur sur une application ASP MVC? (ActionFilters / HTTPModules).

Quelque chose qui ressemble à la dernière activité de l'utilisateur (tout comme StackOverflow "Vu il y a 23 minutes") et même les pages et les contrôleurs utilisés, et en poussant plus loin les boutons ou les liens sur lesquels l'utilisateur a cliqué.

J'ai installé ELMAH, mais pour autant que je sache, il ne s'agit que de la journalisation des erreurs.

PD: Google Analytics n'est pas une option.

Était-ce utile?

La solution

Vous pouvez essayer d'utiliser un aspect PostSharp pour effectuer la journalisation à votre place. être utile pour quelque chose comme ça. Si ce n'est pas une option, alors un module serait probablement le plus facile à implémenter (en supposant que vous puissiez obtenir les informations utilisateur requises à ce stade du pipeline).

Autres conseils

  

Avertissement: ceci a été écrit en 2009 pour MVC .NET RC1 et peut ne plus être syntaxiquement correct.

Action Les attributs de filtre sont parfaits pour cela. Il suffit d'appeler [YourAttributeName] en haut de votre contrôleur (ou si vous possédez un contrôleur d'application dont vos autres contrôleurs héritent, une fois dans votre application).

Par exemple:

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

À partir de maintenant, cet attribut sera appelé avant que chaque action ne soit exécutée dans votre (vos) contrôleur (s). Vous pouvez également le spécifier pour une action uniquement en appelant [Log] juste avant ce dernier. même mode.

Pour obtenir la fonctionnalité de journalisation dont vous avez besoin, vous voudrez probablement remplacer OnResultExecuting et OnResultExecuted , les deux étant assez explicites.

Par exemple:

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

Je viens de trébucher sur ces 2 publications de Rion Williams qui décrivent une manière très simple de procéder:

Implémentation des pistes d'audit utiliser ASP.NET MVC ActionFilters

Création de pistes d'audit avancées à l'aide d'ActionFilters dans ASP.NET MVC

La publication avancée est vraiment géniale car vous pouvez stocker les données de la demande et les filtrer davantage.

Je vais implémenter cela maintenant dans mon application.

@ L'idée de Rory est excellente. PostSharp est exactement ce dont vous avez besoin pour cela. Vous pouvez également l'associer à ASP.net Surveillance de l'état de santé

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top