为什么Session在控制器的构造函数中为null?它可以从Action方法访问.据推测,因为MVC路由框架负责新建一个Controller,所以它当时没有(重新)实例化Session.
有谁知道这是否是设计的,如果是的话,为什么?
[我已设法通过使用延迟加载模式来解决问题.]
我正在尝试开发一个类库,我想在其中实现自定义DbContext
.在SaveChanges
方法中DbContext
,我需要获取当前用户的信息(部门,用户名等)以供审计.DbContext
代码的某些部分如下:
public override int SaveChanges()
{
// find all changed entities which is ICreateAuditedEntity
var addedAuditedEntities = ChangeTracker.Entries<ICreateAuditedEntity>()
.Where(p => p.State == EntityState.Added)
.Select(p => p.Entity);
var now = DateTime.Now;
foreach (var added in addedAuditedEntities)
{
added.CreatedAt = now;
added.CreatedBy = ?;
added.CreatedByDepartment = ?
}
return base.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
想到两个选项:
HttpContext.Items
保存用户信息,注入IHttpContextAccessor并从中获取信息
HttpContext.Items
(在这种情况下DbContext
取决于HttpContext
,是否正确?)HttpContext.Items
从对象获取信息(我读了一些ThreadStatic不安全的帖子)问题:哪种情况最适合我的情况?你有其他建议吗?