c# - 如何在运行时更改 Web API 的连接字符串

标签 c# asp.net-mvc asp.net-web-api connection-string

我希望这是一个简单的问题:

How can you change 2 connection strings at runtime in the Global.asax under Application_Start()

Web.config

<connectionStrings>
  <add connectionString="DB1" value=""/>
  <add connectionString="DB2" value=""/>
</connectionStrings>

Global.asax

protected void Application_Start() {
    AreaRegistration.RegisterAllAreas();
    GlobalConfiguration.Configure(WebApiConfig.Register);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

详情

在我开始收到关于我为什么这样做或不应该这样做的问题之前,请参阅以下帖子 Azure Key Vault Connection Strings and N-Layered Design .

本质上,我正在尝试将 Key Vault 与 N 层应用程序一起使用。 WebAPI 通过 Web.config 定义连接字符串。为了避免硬编码连接字符串,它们将存储在 Key Vault 中。但是,由于使用了 Unit Of Work 模式,我不确定最佳路线,目前我正在尝试找出注入(inject)仅在 Web API 项目的运行时更改连接字符串。

最佳答案

我觉得我可能没有理解这个问题(因为我对 Azure Key Vault 一无所知),但你并没有真正在 Application_Start 中获得你的连接字符串......

查看this answer ,我认为你可以实现一个函数,它会根据变量返回所需的连接字符串:

string GetConnectionString()
{
    if (/* some dynamic variable is set */) {
        return  "DB1";
    }
    else {
        return "DB2";
    }
}

现在,假设你有上面的函数,你可以用它来初始化你的DbContext:

MyDbContext myDbContext = new MyDbContext(GetConnectionString());

或者,如果您要注入(inject) DbContext,您可以在 DI 代码中使用它(ninject 示例):

kernel.Bind<IMyDbContext>()
    .ToConstructor(ctorArg => new MyDbContext(GetConnectionString()))
    .InRequestScope();

关于c# - 如何在运行时更改 Web API 的连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54835484/

相关文章:

c# - 如何维护网站和虚拟应用程序之间的 .aspxauth session cookie?

javascript - 在 JavaScript 函数中使用 C# for 循环中的迭代变量

asp.net-mvc - "Login Failure"在 asp.net mvc 4 中使用 LinkedIn OAuth

c# - IIS 7.5 中的 ASP.NET Core WebAPI 500 内部错误

c# - 忽略 ASP.NET Web API 中的 Controller

asp.net-web-api - 如何使用 Microsoft.Owin.Security 自定义 System.Web.Http.AuthorizeAttribute?

c# - 覆盖虚拟方法时缺少返回类型协变的解决方法

c# - 将局部变量转换为私有(private)变量会破坏我的 C# 代码

c# - 使用内存数据的.NET Web浏览器控件

asp.net-mvc - ImageResizer 旋转图像