本地和托管服务器的两个连接字符串

时间:2019-02-24 10:58:24

标签: c# .net asp.net-core asp.net-core-2.0 asp.net-core-configuration

我想问一下是否有一种方法可以告诉ASP.NET Core 2选择不同的连接字符串。

每次将网站发布到托管服务器时,不断更改appsettings.json文件中的连接字符串是很烦人的。

我正在使用此代码获取连接字符串。

 services.AddDbContext<AppIdentityDbContext>(options => 
     options.UseSqlServer(Configuration["Data:WebDataBase:ConnectionString"]));

也许有一种简单的方法,但是我正在考虑在Startup.cs中使用if语句:

if (local) {
    services.AddDbContext<AppIdentityDbContext>(options => 
        options.UseSqlServer(Configuration["Data:WebDataBase1:ConnectionString"]));
}
else {
    services.AddDbContext<AppIdentityDbContext>(options => 
        options.UseSqlServer(Configuration["Data:WebDataBase2:ConnectionString"]));
}

但是无论服务器是本地计算机还是实时托管服务器,如何设置此local变量?

"Data": {
  "WebDataBase1": {
    "ConnectionString": "Data Source=DatasoruceName;Initial Catalog=DBname;Trusted_Connection=True;Integrated Security=True;"
  },

  "WebDataBase2": {
    "ConnectionString": "Data Source=DatasoruceName;Initial Catalog=DatabaseName;Trusted_Connection=True;Integrated Security=True;"
  }
}

1 个答案:

答案 0 :(得分:0)

不应在代码中指定特定于环境的配置。 ASP.NET Core具有一种机制,允许您根据运行的环境换出配置。

在开发应用程序时,通常会在Development环境中运行。在将应用程序部署到生产环境时,默认使用Production环境。但是,如果您有其他环境,也可以完全为这些环境组成新的名称,并为其指定特定的配置。 Environments chapter of the documentation

中对此进行了解释

允许您执行的环境是创建多个appsettings.json文件。默认情况下,ASP.NET Core带有两个文件:appsettings.jsonappsettings.Development.json

前者应该包含环境非特定配置;适用于所有环境的事物。后一个文件包含特定于开发的配置,例如,调整日志记录级别,以便您在开发过程中获得更多信息。您还可以使用这些文件在appsettings.json中指定默认的连接字符串,并在appsettings.Development.json中覆盖该字符串以进行开发。

此外,配置文件遵循非常简单的模式:appsettings.<Environment>.json。因此,如果您在Production环境中运行,则将加载名为appsettings.Production.json的文件(如果存在)。这种机制使您可以不同地配置所有环境,而不必在代码中进行检测。

此外,在开发过程中还有用户秘密的概念。这些是针对特定于开发的配置,这些配置仅适用于您自己,而不适用于您团队的其他成员。基本上,这是每台计算机的配置,可让您覆盖appsettings.jsonappsettings.Development.jsonuser secrets chapter中对此进行了描述。

最佳做法是,尽管如此,还是完全避免在配置文件中完全使用连接字符串,因为您希望避免碰巧能够访问您的配置文件的人员(例如通过源代码)知道数据库的密码。在这种情况下,您可以使用其他本地机制,例如environment variables


在您的情况下,您仅使用集成安全性,因此依赖于当前用户的凭据,这不是什么大问题。您唯一泄漏的是数据库名称。 –因此,您绝对可以从将连接字符串放入appsettings文件中开始。

例如,这就是您在启动ConfigureServices内配置数据库上下文的方式:

services.AddDbContext<AppIdentityDbContext>(options => 
    options.UseSqlServer(Configuration.GetConnectionString("WebDataBase"));

您的appsettings.Development.json如下所示:

{
  "ConnectionStrings": {
    "WebDataBase": "Data Source=DatasourceName;Initial Catalog=DBname;Trusted_Connection=True;Integrated Security=True;"
  }
}

您的appsettings.Production.json如下所示:

{
  "ConnectionStrings": {
    "WebDataBase": "Data Source=DatasourceName;Initial Catalog=DatabaseName;Trusted_Connection=True;Integrated Security=True;"
  }
}