相关疑难解决方法(0)

ASP.Net MVC控制器构造函数中的会话为null

为什么Session在控制器的构造函数中为null?它可以从Action方法访问.据推测,因为MVC路由框架负责新建一个Controller,所以它当时没有(重新)实例化Session.

有谁知道这是否是设计的,如果是的话,为什么?

[我已设法通过使用延迟加载模式来解决问题.]

asp.net-mvc session

84
推荐指数
4
解决办法
6万
查看次数

如何使用Net Core在DbContext中获取用户信息

我正在尝试开发一个类库,我想在其中实现自定义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,是否正确?)
  • 使用ThreadStatic对象而不是HttpContext.Items从对象获取信息(我读了一些ThreadStatic不安全的帖子)

问题:哪种情况最适合我的情况?你有其他建议吗?

c# entity-framework-core .net-core asp.net-core

17
推荐指数
2
解决办法
9193
查看次数