JOB*_*OBG 22 asp.net-mvc logging user-activity audit-trail audit-logging
是否有一个很好的策略来记录ASP MVC应用程序上的用户活动?(ActionFilters/HTTPModules).
像上次用户活动的东西(就像StackOverflow"23分钟前看到的那样"),甚至是使用的页面和控制器,并进一步推动了点击的按钮或链接.
我安装了ELMAH但据我所知它只是用于错误记录.
PD:谷歌分析不是一个选项.
Jay*_*Jay 45
动作过滤器属性非常适用于此,只需[YourAttributeName]在控制器顶部调用(或者如果您有其他控制器继承的应用程序控制器,您只需在应用程序中使用一次).
例如:
namespace the_name_space
{
[Log]
public class ApplicationController : Controller
{
Run Code Online (Sandbox Code Playgroud)
从此时起,将在您的控制器中运行每个操作之前调用此属性,您也可以通过[Log]以相同方式在其之前调用来仅在操作上指定此属性.
为了得到你需要的日志记录功能,您将最有可能要重写OnResultExecuting和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.
}
}
Run Code Online (Sandbox Code Playgroud)
Len*_*rri 21
我只是偶然发现了Rion Williams的这两篇帖子,这些帖子描述了一种非常简单的方法:
使用ASP.NET MVC ActionFilters实现审计跟踪
使用ASP.NET MVC中的ActionFilters创建高级审计跟踪
高级帖子非常棒,因为您可以存储请求的数据并进一步过滤该数据.
我现在将在我的应用程序中实现此功能.