.NET6 WebApi 根据登录Jwt中用户信息更改SQL连接字符串,无法将HttpContext注入DBContext.cs文件解决方法

如果通过DBContext的构造函数直接注入HttpContext是,获取的是Null,

可以注入一个IServiceProvider,然后获取IHttpContextAccessor就可以取到HttpContext了

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            base.OnConfiguring(optionsBuilder);
            var httpContext=serviceProvider.GetRequiredService<IHttpContextAccessor>().HttpContext;
            /*
            通过具体操作取到connStr
            */
            optionsBuilder.UseSqlServer(connStr);
        }

感谢原文里的回答:.NET Core WebApp,多域,根据主机名更改SQL连接字符串,无法将httpcontext注入DB Context.cs文件 | 那些遇到过的问题dd如何解决<.NET Core WebApp,多域,根据主机名更改SQL连接字符串,无法将httpcontext注入DB Context.cs文件>经验,为你挑选了1个好方法https://qa.1r1g.com/sf/ask/3953413621/以下是引用原文里的回答

这是我一直用于多租户解决方案(客户拥有自己的数据库)的方法。

使用此构造函数签名创建上下文(不需要OnConfiguring):

public class MyDbContext : DbContext
{
    public MyDbContext(DbContextOptions<MyDbContext> options)
        : base(options) { }
}

在您的 Startup 中,您需要注册您的上下文,我们现在可以添加一个解析器来获取正确的连接设置:

services.AddHttpContextAccessor();
services.AddDbContext<MyDbContext>();

// This registers DbContextOptions<MyDbContext> which will be called when a new
// instance of MyDbContext is created. You could set breakpoints in this method.
services.AddScoped(sp => 
{
    var context = sp.GetRequiredService<IHttpContextAccessor>().HttpContext;

    // your logic to determine connection string or EF provider
    // ...

    var builder = new DbContextOptionsBuilder<MyDbContext>();
    builder.UseSqlServer("connection string");

    return builder.Options;
});

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值