本地和托管服务器的两个连接字符串
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.json
和 appsettings.Development.json
.
前者应该包含环境非特定配置;适用于所有环境的事物。后一个文件包含特定于开发的配置,例如调整日志记录级别,以便您在开发过程中获得更多信息。您还可以使用这些文件在 appsettings.json
中指定默认连接字符串,并在 appsettings.Development.json
.
中覆盖该字符串以进行开发
此外,配置文件遵循一个非常简单的模式:appsettings.<Environment>.json
。因此,如果您在 Production
环境中 运行,将加载名为 appsettings.Production.json
的文件(如果存在)。此机制允许您以不同方式配置所有环境,而无需在代码中求助于检测。
另外,在开发的时候还有user secrets的概念。这些用于特定于开发的配置,这些配置仅适用于您自己,例如不适用于您团队的其他成员。这基本上是一个每台机器的配置,允许您覆盖 appsettings.json
和 appsettings.Development.json
。 user 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;"
}
}
请问有没有办法告诉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.json
和 appsettings.Development.json
.
前者应该包含环境非特定配置;适用于所有环境的事物。后一个文件包含特定于开发的配置,例如调整日志记录级别,以便您在开发过程中获得更多信息。您还可以使用这些文件在 appsettings.json
中指定默认连接字符串,并在 appsettings.Development.json
.
此外,配置文件遵循一个非常简单的模式:appsettings.<Environment>.json
。因此,如果您在 Production
环境中 运行,将加载名为 appsettings.Production.json
的文件(如果存在)。此机制允许您以不同方式配置所有环境,而无需在代码中求助于检测。
另外,在开发的时候还有user secrets的概念。这些用于特定于开发的配置,这些配置仅适用于您自己,例如不适用于您团队的其他成员。这基本上是一个每台机器的配置,允许您覆盖 appsettings.json
和 appsettings.Development.json
。 user 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;"
}
}