Asp.net mvc 实现我自己的统计引擎,并有一个网站访问记录?

Asp.net mvc 实现我自己的统计引擎,并有一个网站访问记录?,asp.net-mvc,google-analytics,statistics,glimpse,Asp.net Mvc,Google Analytics,Statistics,Glimpse,我应该为我们的ASP.netmvc4web应用程序创建一个内部统计机制。我们不会使用像谷歌分析或甚至一瞥这样的外部工具。因为我不确定是否可以从他们的API中提取所需的数据 我们所期望的这种机制非常类似于谷歌分析,包括页面点击数、引用者、关键字等,但只针对部分页面,而不是全部页面。我们希望在我们自己的页面和报告中使用这些数据 现在我有两个问题。忽略谷歌分析或一瞥并实施我自己的分析是正确的吗?如果是,每次访问网站时在数据库中保存一条记录,然后使用这些记录提取统计数据是否合理 非常感谢您的帮助我认为您

我应该为我们的
ASP.netmvc4
web应用程序创建一个内部统计机制。我们不会使用像
谷歌分析
或甚至
一瞥
这样的外部工具。因为我不确定是否可以从他们的API中提取所需的数据

我们所期望的这种机制非常类似于
谷歌分析
,包括页面点击数、引用者、关键字等,但只针对部分页面,而不是全部页面。我们希望在我们自己的页面和报告中使用这些数据

现在我有两个问题。忽略
谷歌分析
一瞥
并实施我自己的分析是正确的吗?如果是,每次访问网站时在数据库中保存一条记录,然后使用这些记录提取统计数据是否合理


非常感谢您的帮助

我认为您可以实现这两个目标。如果不理解您需要的业务逻辑,很难说。但是,如果您需要关于每个请求的更详细信息(访问的用户角色、检索控制器/操作名称以获取某些特定统计信息、记录对特定资源的访问等),您可以使用操作过滤器轻松实现这一点

public class StatisticFilter : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        base.OnActionExecuted(filterContext);
        if (filterContext.IsChildAction) //if action call was from view like @Html.Action do nothing
            return;
        var CurrentUser = filterContext.RequestContext.HttpContext.User;
        if (CurrentUser.IsInRole("some_role"))
            return; //write logic for this role
        string controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;            
        string actionNaem = filterContext.ActionDescriptor.ActionName;
        //here the id of the accessed resource - document, sale, page etc. 
        string id = filterContext.RequestContext.RouteData.Values["id"].ToString(); 
    }

}
就这些。您可以根据需要扩展任何逻辑。 在我的项目中,我有一个带有filds的统计表: 日期-时间戳

控制器-字符串

动作串

id-bigint

方法-字符串(POST、GET…如果是POST提交的)

用户id-bigint


并为执行的每个请求插入记录。所以我有关于任何统计数据请求的最重要信息。

我认为您可以实现这两个功能。如果不理解您需要的业务逻辑,很难说。但是,如果您需要关于每个请求的更详细信息(访问的用户角色、检索控制器/操作名称以获取某些特定统计信息、记录对特定资源的访问等),您可以使用操作过滤器轻松实现这一点

public class StatisticFilter : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        base.OnActionExecuted(filterContext);
        if (filterContext.IsChildAction) //if action call was from view like @Html.Action do nothing
            return;
        var CurrentUser = filterContext.RequestContext.HttpContext.User;
        if (CurrentUser.IsInRole("some_role"))
            return; //write logic for this role
        string controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;            
        string actionNaem = filterContext.ActionDescriptor.ActionName;
        //here the id of the accessed resource - document, sale, page etc. 
        string id = filterContext.RequestContext.RouteData.Values["id"].ToString(); 
    }

}
就这些。您可以根据需要扩展任何逻辑。 在我的项目中,我有一个带有filds的统计表: 日期-时间戳

控制器-字符串

动作串

id-bigint

方法-字符串(POST、GET…如果是POST提交的)

用户id-bigint


并为执行的每个请求插入记录。因此,对于任何统计数据,我都有关于请求的最重要信息。

我建议在其中添加一个检查,检查请求是否通过Ajax。在某些情况下,您可能不想将Ajax调用记录为流量统计数据的一部分。我担心总记录数过一段时间后会非常庞大。您可以编写一些逻辑来删除此表中的记录periodicaly@maxs87:谢谢。我也有类似的想法。您让我确保这种方式是正确的。我建议在这种方式中添加一个检查,检查请求是否通过Ajax。在某些情况下,您可能不想将Ajax调用记录为流量统计数据的一部分。我担心总记录数过一段时间后会非常庞大。您可以编写一些逻辑来删除此表中的记录periodicaly@maxs87:谢谢。我也有类似的想法。你让我确保这种方式是正确的。