27

是否有在 ASP MVC 应用程序上记录用户活动的好策略?(ActionFilters/HTTPModules)。

类似于上次用户活动(就像 StackOverflow “23 分钟前看到”),甚至使用了什么页面和控制器,甚至进一步推动了点击了哪些按钮或链接。

我安装了 ELMAH,但据我所知,它仅用于错误记录。

PD:谷歌分析不是一个选项。

4

4 回答 4

49

警告:这是 2009 年为 MVC .NET RC1 编写的,在语法上可能不再正确。

Action Filter Attributes是完美的,只需在控制器顶部调用 to [YourAttributeName](或者如果您有一个其他控制器继承自的应用程序控制器,您只需要在应用程序中使用一次)。

例如:

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

从现在开始,这个属性将在每个动作在你的控制器中运行之前被调用,你也可以通过[Log]在它之前以相同的方式调用它来指定它。

要获得您需要的日志记录功能,您很可能想要覆盖OnResultExecutingand OnResultExecuted,这两者都是不言自明的。

例如:

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.
    }
}
于 2009-12-01T05:38:34.303 回答
23

我刚刚偶然发现了Rion Williams的这两篇文章,它们描述了一种非常简单的方法:

使用 ASP.NET MVC ActionFilters 实现审计跟踪

在 ASP.NET MVC 中使用 ActionFilters 创建高级审计跟踪

高级帖子真的很棒,因为您可以存储请求的数据并进一步过滤该数据。

我现在将在我的应用程序中实现这一点。

于 2013-05-28T20:39:09.173 回答
6

您可以尝试使用PostSharp方面为您执行日志记录,它的多播功能可能会派上用场。如果它不是一个选项,那么模块可能是最容易实现的(假设您可以在管道中的那个点获得所需的用户信息)。

于 2009-11-30T22:20:13.627 回答
1

@Rory 的想法很棒。PostSharp 正是您所需要的,您可以考虑将其与ASP.net Health Monitoring结合使用

于 2009-12-01T01:27:59.097 回答