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

Two connection strings for local and hosting server

请问有没有办法告诉ASP.NETCore 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;"
  }
}

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

在开发您的应用程序时,您通常 运行 在 Development 环境中。当您部署生产应用程序时,默认使用 Production 环境。但是,如果您有其他环境,您也完全可以为这些环境起一个新的名称,并为它们进行特定的配置。这一切都在 Environments chapter of the documentation

中进行了解释

环境允许您创建多个 appsettings.json 文件。 ASP.NET 核心默认带有两个文件:appsettings.jsonappsettings.Development.json.

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

中覆盖该字符串以进行开发

此外,配置文件遵循一个非常简单的模式:appsettings.<Environment>.json。因此,如果您在 Production 环境中 运行,将加载名为 appsettings.Production.json 的文件(如果存在)。此机制允许您以不同方式配置所有环境,而无需在代码中求助于检测。

另外,在开发的时候还有user secrets的概念。这些用于特定于开发的配置,这些配置仅适用于您自己,例如不适用于您团队的其他成员。这基本上是一个每台机器的配置,允许您覆盖 appsettings.jsonappsettings.Development.jsonuser secrets chapter.

中对此进行了描述

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


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

例如,这就是您在 Startup 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;"
  }
}