.NET Core应用程序开发中如何在EF Core的数据上下文(DbContext)中访问用户登录信息?
3.14K 次浏览
在.NET Core的应用程序编程开发中,如果在一个单独的类库中使用EF Core实现数据库访问层的代码,为了减少参数的传递,现在需要在数据库访问的上下文(DbContext)中直接访问HTTP请求的上下文中(HttpContext)的用户登录信息,应该如何访问呢?
比如以下类似的信息:
public override int SaveChanges()
{
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 = DateTime.Now;
added.CreatedBy = ?; // 需从HttpContext中获取
added.CreatedByDepartment = ? // 需从HttpContext中获取
}
return base.SaveChanges();
}
1 个回答
-
在.NET Core类库项目中,创建一个专门的用户信息服务类
UserResolverService
,在此类中注入IHttpContextAccessor
接口实例,然后通过访问IHttpContextAccessor
的实例来获取HttpContext中的用户登录信息,如下:在
Startup.cs
文件中注册服务,如下:同时,在
Startup.cs
文件中注册IHttpContextAccessor
:.NET Core 2.1+ 开始,可以直接调用
services.AddHttpContextAccessor();
方法来注册IHttpContextAccessor
服务。最后,在数据库访问上下文中的使用示例如下:
当然,在
ExampleContext
中,除了可以访问HttpContext的用户信息,你还可以访问所有的当前请求的数据。根据具体需求实现逻辑即可。