Domanda

Esiste una buona strategia per registrare l'attività dell'utente su un'app ASP MVC? (ActionFilters / HTTPModules).

Qualcosa come l'attività dell'ultimo utente (proprio come StackOverflow " visto 23 minuti fa "), e anche quali pagine e controller sono stati usati, e spingendo ancora di più su quali pulsanti o link sono stati cliccati.

Ho ELMAH installato ma per quanto ne so è solo per la registrazione degli errori.

PD: Google Analytics non è un'opzione.

È stato utile?

Soluzione

Potresti provare a utilizzare un aspetto PostSharp per eseguire la registrazione per te, la sua funzionalità multi-cast potrebbe tornare utile per qualcosa del genere. Se non è un'opzione, un modulo sarebbe probabilmente il più facile da implementare (supponendo che tu possa ottenere le informazioni utente richieste in quel punto della pipeline).

Altri suggerimenti

  

Avviso: è stato scritto nel 2009 per MVC .NET RC1 e potrebbe non essere più sintatticamente corretto.

Azione Gli attributi di filtro sono perfetti per questo, basta fare una chiamata a [YourAttributeName] nella parte superiore del controller (o se si dispone di un controller dell'applicazione da cui ereditano gli altri controller, è necessario solo una volta nella tua applicazione).

Ad esempio:

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

Da questo punto in poi questo attributo verrà chiamato prima che ogni azione venga eseguita nei tuoi controller, puoi anche specificarlo su un'azione chiamando [Log] appena prima nel stessa moda.

Per ottenere la funzionalità di registrazione richiesta, è molto probabile che si desideri sostituire OnResultExecuting e OnResultExecuted , entrambi abbastanza chiari.

Ad esempio:

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

Mi sono appena imbattuto in questi 2 post di Rion Williams che descrivono un modo molto semplice per farlo:

Implementazione di audit trail utilizzando ASP.NET MVC ActionFilters

Creazione di percorsi di controllo avanzati mediante ActionFilters in ASP.NET MVC

Il post avanzato è davvero eccezionale in quanto è possibile archiviare i dati della richiesta e filtrare ulteriormente tali dati.

Lo implementerò subito nella mia app.

L'idea di @ Rory è eccellente. PostSharp è proprio quello che ti serve per questo, potresti prendere in considerazione l'idea di accoppiarlo con ASP.net Monitoraggio sanitario

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top