所以我将默认的User类扩展为;
[Serializable]
public class AUser : IdentityUser<int, AUserLogin, AUserRole, AUserClaim>, IUser , IXmlSerializable
{
public virtual DateTime LastActivity { get; set; }
...
...
}
我有一种更新用户活动的方法
public async void UpdateUserActivity(string userName)
{
var user = _userManager.FindByName(userName);
user.LastActivity = DateTime.UtcNow;
await _userManager.UpdateAsync(user);
}
我的目的是跟踪用户的上次活动时间。上次活动时间是指用户上次对应用程序执行任何操作的时间。
我计划在每个请求执行后调用update方法。但是,这意味着对每个请求在数据库上执行更新。这对我来说听起来很昂贵。
问题:我应该在哪里打电话?有没有更好的方法来跟踪用户上次活动?
此致
答案 0 :(得分:0)
您可以使用控制器内的OnActionExecuted事件来跟踪用户活动,并使用HttpContext.Application
将所有用户的活动日志写入应用程序范围的对象。为了保持数据库的流量较低,您可以实现一个全局后台线程,该线程读取本地存储的活动数据,并在固定时间后(例如每分钟一次)将它们写入您的数据库。
您的数据库流量会减少,但活动数据不会是100%最新的。取决于您的数据库更新周期。