我认为你可以实现这两个 satistic。如果不了解您需要的业务逻辑,这很难说。但是,如果您需要有关每个请求的更详细信息(访问的用户角色、检索某些特定统计信息的控制器/操作名称、对特定资源的日志访问等),您可以使用操作过滤器轻松实现这一点。
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();
}
}
就这样。您可以通过您需要的任何逻辑来扩展它。在我的项目中,我有一个带有字段的统计表:日期 - 时间戳,
控制器 - 字符串,
动作 - 字符串,
id - bigint
方法 - 字符串(POST,GET ...如果发布 - 提交)
user_id - bigint
并为每个执行的请求插入记录。所以我有关于任何统计请求的最重要信息。