.net core 基于开发或产品环境的.NET Core 2.2 Razor Pages条件连接字符串
多年来,我一直在.NET Web表单中执行此操作:.net core 基于开发或产品环境的.NET Core 2.2 Razor Pages条件连接字符串,.net-core,connection-string,razor-pages,.net Core,Connection String,Razor Pages,多年来,我一直在.NET Web表单中执行此操作: Dim conn As New SqlConnection(f1.fUseThisConnection(Server.MachineName)) Public Function fUseThisConnection(ByVal strThisMachine As String) As String If strThisMachine = "T61" Then fUseThisConnection = Config
Dim conn As New SqlConnection(f1.fUseThisConnection(Server.MachineName))
Public Function fUseThisConnection(ByVal strThisMachine As String) As String
If strThisMachine = "T61" Then
fUseThisConnection = ConfigurationManager.AppSettings("DevHome")
Else
fUseThisConnection = ConfigurationManager.AppSettings("Production")
End If
End Function
AppSettings位于Web.config中:
<appSettings>
<add key="Production" value="server=xxx;uid=xxx;pwd=xxx;database=xxx;pooling=false" />
<add key="DevHome" value="server=xxx;uid=xxx;pwd=xxx;database=xxx;pooling=false" />
这里是我引用连接字符串的地方——它是硬编码的——但我希望有一种方法可以执行“If”语句:“If environment=whatever,然后获取这个连接字符串”
services.AddDbContext(
选项=>{options.UseSqlServer(@“数据源=Txxx;初始目录=xxx;集成安全性=True”);});
只要检查一下,我想您使用的是Asp Net Core,并且您正在启动中添加Mvc
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseMvc();
...
}
默认情况下,它将尝试加载2个配置文件,appsettings.json
和appsettings.{Environment}.json
,最新的配置将覆盖最终配置的内容,而且默认情况下,core已经有两个环境,开发
和生产
,所有这些都取决于您使用的配置文件(在VisualStudio中,默认情况下将是development)
因此,可以将配置文件重命名为appsettings.json
,然后为生产声明连接字符串,并创建一个文件appsettings.Development.json
,您可以使用开发连接字符串覆盖连接
services.AddDbContext<MyDbContext>(
options => { options.UseSqlServer(@"Data Source=Txxx;Initial Catalog=xxx;Integrated Security=True"); });
您还可以加载更多文件来更改默认文件,方法如下
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.SetBasePath(Directory.GetCurrentDirectory());
config.AddInMemoryCollection(arrayDict);
config.AddJsonFile("json_array.json", optional: false, reloadOnChange: false);
config.AddJsonFile("starship.json", optional: false, reloadOnChange: false);
config.AddXmlFile("tvshow.xml", optional: false, reloadOnChange: false);
config.AddEFConfiguration(options => options.UseInMemoryDatabase("InMemoryDb"));
config.AddCommandLine(args);
})
.UseStartup<Startup>();
<强>但请考虑更安全< <强>
对于敏感数据,更安全的方法是将连接字符串配置为服务器中的环境变量,这样可以将其从代码中删除并保持更私密 可以在中找到使用机密管理器的此解决方案和其他解决方案 编辑 否则,它默认为“appSettings.json”文件(这将是 生产中) 不,它不会加载一个或另一个,首先它会加载appsettings.json,无论您使用的是什么环境,都是这样 然后,在加载appsettings.json
之后,它将尝试加载appsettings.{Environment}.json
,并添加以前不存在的键,如果存在,它将覆盖旧键
如果应用程序设置中有
{
"SomeConfigJustInAppSettings": "some value",
"ThisWillBeOverride": "some value"
}
以及您的appsettings.Development.json
{
"SomeConfigJustInDev": "some other value",
"ThisWillBeOverride": "some other value"
}
您在dev中的配置最终将是:
{
"SomeConfigJustInAppSettings": "some value",
"SomeConfigJustInDev": "some other value",
"ThisWillBeOverride": "some other value"
}
什么决定了“ASPNETCORE_环境”的价值
是一个,在操作系统中设置。另外,对于开发,Visual studio有能力在您开发应用程序时预加载一些变量,只需检查您的启动设置.json
,例如:
{
"profiles": {
"MyProject": {
"commandName": "Project",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:50051"
},
"Docker": {
"commandName": "Docker",
"launchBrowser": true,
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}"
}
}
}
特别是这一部分
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
只要找到服务器名称并使用它就好了。
因为我只会检查我的开发框servername,以及其他所有内容
这意味着生产
现在更简单的是,如果变量不存在,它只加载可能包含prod设置的appsettings。当您在开发时,visual studio(或VS code或Rider)已经在添加值为Development
的变量,因此您只需添加文件appsettings.Development.json
你甚至可以创建一个新的项目,默认的项目布局已经为你创建了这两个文件
只要检查一下,我想您正在使用Asp Net Core,并且您正在启动中添加Mvc
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseMvc();
...
}
默认情况下,它将尝试加载2个配置文件,appsettings.json
和appsettings.{Environment}.json
,最新的配置将覆盖最终配置的内容,而且默认情况下,core已经有两个环境,开发
和生产
,所有这些都取决于您使用的配置文件(在VisualStudio中,默认情况下将是development)
因此,可以将配置文件重命名为appsettings.json
,然后为生产声明连接字符串,并创建一个文件appsettings.Development.json
,您可以使用开发连接字符串覆盖连接
services.AddDbContext<MyDbContext>(
options => { options.UseSqlServer(@"Data Source=Txxx;Initial Catalog=xxx;Integrated Security=True"); });
您还可以加载更多文件来更改默认文件,方法如下
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.SetBasePath(Directory.GetCurrentDirectory());
config.AddInMemoryCollection(arrayDict);
config.AddJsonFile("json_array.json", optional: false, reloadOnChange: false);
config.AddJsonFile("starship.json", optional: false, reloadOnChange: false);
config.AddXmlFile("tvshow.xml", optional: false, reloadOnChange: false);
config.AddEFConfiguration(options => options.UseInMemoryDatabase("InMemoryDb"));
config.AddCommandLine(args);
})
.UseStartup<Startup>();
<强>但请考虑更安全< <强>
对于敏感数据,更安全的方法是将连接字符串配置为服务器中的环境变量,这样可以将其从代码中删除并保持更私密 可以在中找到使用机密管理器的此解决方案和其他解决方案 编辑 否则,它默认为“appSettings.json”文件(这将是 生产中) 不,它不会加载一个或另一个,首先它会加载appsettings.json,无论您使用的是什么环境,都是这样 然后,在加载appsettings.json
之后,它将尝试加载appsettings.{Environment}.json
,并添加以前不存在的键,如果存在,它将覆盖旧键
如果应用程序设置中有
{
"SomeConfigJustInAppSettings": "some value",
"ThisWillBeOverride": "some value"
}
以及您的appsettings.Development.json
{
"SomeConfigJustInDev": "some other value",
"ThisWillBeOverride": "some other value"
}
您在dev中的配置最终将是:
{
"SomeConfigJustInAppSettings": "some value",
"SomeConfigJustInDev": "some other value",
"ThisWillBeOverride": "some other value"
}
什么决定了“ASPNETCORE_环境”的价值
是一个,在操作系统中设置。另外,对于开发,Visual studio有能力在您开发应用程序时预加载一些变量,只需检查您的启动设置.json
,例如:
{
"profiles": {
"MyProject": {
"commandName": "Project",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:50051"
},
"Docker": {
"commandName": "Docker",
"launchBrowser": true,
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}"
}
}
}
特别是这一部分
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
只要找到服务器名称并使用它就好了。
因为我只会检查我的开发框servername,以及其他所有内容
这意味着生产
现在更简单的是,如果变量不存在,它只加载可能包含prod设置的appsettings。当您在开发时,visual studio(或VS code或Rider)已经在添加值为Development
的变量,因此您只需添加文件appsettings.Development.json
你甚至可以创建一个新的项目,默认的pr