我没有使用会话状态。我甚至在Web.config
中禁用了它,并删除了会话模块。但是,我现在需要记录访问者数据,而不知道如何?
我虽然这样做:
void Session_Start(object, EventArgs)
Global.asax
方法中捕获新会话
但我不想使用会话状态,除非我需要。我记得会话默认是锁定的,这会减慢管道。
那么如何在没有会话状态的情况下在ASP.NET MVC中记录访问者数据?
答案 0 :(得分:1)
在asp.net/mvc网站上有一个方法:http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/understanding-action-filters-cs
总之,添加一个类:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public sealed class LogVisitorsAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var descriptor = filterContext.ActionDescriptor;
var controller = descriptor.ControllerDescriptor.ControllerName;
var action = descriptor.ActionName;
var user = filterContext.HttpContext.User.Identity.Name;
// add your logging here
log(description, controller, action, user);
}
}
您可以在OnActionExecuting
期间提取各种有趣的“访问者数据”,例如控制器/操作名称(如图所示)和传递给操作的值(操作参数)。
然后您可以将其添加到个别操作
[LogVisitors]
public ActionResult Index()
或控制器(或基本控制器)
[LogVisitors]
public class HomeController
或将所有操作和控制器添加到FilterConfig(应该已存在)
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new LogVisitorsAttribute());
}
}
答案 1 :(得分:0)
我想到了另一种方式,但它太乱了:
Application_BeginRequest()
Global.asax
方法
缺点:
优点:
希望有更好的方法,因为这看起来很混乱。