【问题标题】:Can you pass current user into dbcontext using asp.net core DI您可以使用 asp.net core DI 将当前用户传递到 dbcontext
【发布时间】:2019-04-29 17:22:58
【问题描述】:

我目前正在为我的上下文使用 DI,如下所示。

services.AddTransient<APDatabase.DBContext>(provider =>
{
    return new APDatabase.DBContext();
});

是否可以将当前登录的用户传递给这个?我目前在控制器中获取用户如下。

public NavigationController(APDatabase.DBContext context, IHttpContextAccessor httpContextAccessor)
{
    this._context = context;
    this._currentUser = httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;
}

然后我可以在每个控制器的构造函数中将其设置为上下文的属性。这是我目前能看到的唯一方法,但如果可能的话,我希望让 DI 为我处理它。

【问题讨论】:

标签: c# asp.net-core asp.net-identity


【解决方案1】:

首先,您应该使用 DI 通过services.AddDbContext&lt;ApplicationDbContext&gt; 而不是return new APDatabase.DBContext(); 注册DBContext。

按照以下步骤操作:

  1. 数据库上下文:

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        private HttpContext _httpContext;
        public string CurrentUser => _httpContext.User.FindFirst(ClaimTypes.NameIdentifier)?.Value;
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options,
            IHttpContextAccessor httpContextAccessor)
            : base(options)
        {
            _httpContext = httpContextAccessor.HttpContext;
        }        
    }
    
  2. 注册DbContext

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    
  3. 用例

    public class HomeController : Controller
    {
        private readonly ApplicationDbContext _appDbContext;
        public HomeController(ApplicationDbContext applicationDbContext)
        {
            _appDbContext = applicationDbContext;
        }        
        public async Task<IActionResult> Index()
        {
            var user = _appDbContext.CurrentUser;
            return View();
        }
    
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-24
    • 2019-08-08
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 2020-01-16
    • 1970-01-01
    相关资源
    最近更新 更多