asp.net 核心 2.2 未使用 WebApp Azure 配置中设置的 ConnectionString
asp.net core 2.2 is not using ConnectionString set in WebApp Azure config
我已经 asp.net 核心 2.2 应用部署到 Azure。在 Azure 门户中,我为应用程序添加了一个连接字符串,但是 asp.net 核心没有选择那个,它正在使用 appsettings.json.
中的那个
我做了什么来检查这个?我刚刚将我在 Azure 中输入的连接字符串复制到 appsettings.json 文件(因此替换了开发版本),重新部署它并且工作正常。
有什么建议吗?
public class Program
{
public static void Main(string[] args)
{
WebHost
.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build()
.Run();
}
}
摘自startup.cs
public void ConfigureServices(IServiceCollection services)
{
...
services.AddDbContext<BattMobilityDbContext>(option => option.UseSqlServer(_configuration.GetConnectionString("BattMobilityDbConnection")));
...
}
从应用程序设置中提取。
"ConnectionStrings": {
"BattMobilityDbConnection": "Data Source=localhost\SQLEXPRESS_JSL; initial catalog=BattMobility; integrated security=true"
},
来自 Azure 的屏幕截图
我想我在将我的 azure 函数升级到目标“.NET Core 2.1”时遇到了同样的事情。突然,该应用不再从 Azure 应用服务读取 AppSettings 或 ConnectionString。
我通过为 AppSettings 添加前缀 "APPSETTINGS_" 和为连接字符串(AzureSQL 类型连接字符串)添加前缀 "SQLAZURECONNSTR_" 来修复它。
这是初始化配置根的代码:
var basePath = Environment.GetEnvironmentVariable("AzureWebJobsScriptRoot")
?? $"{Environment.GetEnvironmentVariable("HOME")}/site/wwwroot";
var config = new ConfigurationBuilder()
.SetBasePath(basePath)
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: false)
.AddEnvironmentVariables()
.Build();
这是获取 AppSetting 和 ConnectionString 的代码:
public static string GetAppSetting(string name)
{
return ConfigurationRoot?[name]
?? ConfigurationRoot?["Values:" + name]
?? ConfigurationRoot?["APPSETTING_" + name]
?? ConfigurationManager.AppSettings[name];
}
public static string GetConnectionString(string name)
{
return ConfigurationRoot?.GetConnectionString(name)
?? ConfigurationRoot?.GetConnectionString("SQLAZURECONNSTR_" + name)
?? ConfigurationManager.ConnectionStrings[name].ConnectionString;
}
解决方案是在 DbContext 的 OnConfiguring 中添加对环境变量的支持
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (_loggerFactory != null)
{
if (Debugger.IsAttached)
{
optionsBuilder.UseLoggerFactory(_loggerFactory);
}
}
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
// this was the missing part
.AddEnvironmentVariables()
.Build();
var connectionString = configuration.GetConnectionString("xxx");
optionsBuilder.UseSqlServer(connectionString);
}
我已经 asp.net 核心 2.2 应用部署到 Azure。在 Azure 门户中,我为应用程序添加了一个连接字符串,但是 asp.net 核心没有选择那个,它正在使用 appsettings.json.
中的那个我做了什么来检查这个?我刚刚将我在 Azure 中输入的连接字符串复制到 appsettings.json 文件(因此替换了开发版本),重新部署它并且工作正常。
有什么建议吗?
public class Program
{
public static void Main(string[] args)
{
WebHost
.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build()
.Run();
}
}
摘自startup.cs
public void ConfigureServices(IServiceCollection services)
{
...
services.AddDbContext<BattMobilityDbContext>(option => option.UseSqlServer(_configuration.GetConnectionString("BattMobilityDbConnection")));
...
}
从应用程序设置中提取。
"ConnectionStrings": {
"BattMobilityDbConnection": "Data Source=localhost\SQLEXPRESS_JSL; initial catalog=BattMobility; integrated security=true"
},
来自 Azure 的屏幕截图
我想我在将我的 azure 函数升级到目标“.NET Core 2.1”时遇到了同样的事情。突然,该应用不再从 Azure 应用服务读取 AppSettings 或 ConnectionString。
我通过为 AppSettings 添加前缀 "APPSETTINGS_" 和为连接字符串(AzureSQL 类型连接字符串)添加前缀 "SQLAZURECONNSTR_" 来修复它。
这是初始化配置根的代码:
var basePath = Environment.GetEnvironmentVariable("AzureWebJobsScriptRoot")
?? $"{Environment.GetEnvironmentVariable("HOME")}/site/wwwroot";
var config = new ConfigurationBuilder()
.SetBasePath(basePath)
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: false)
.AddEnvironmentVariables()
.Build();
这是获取 AppSetting 和 ConnectionString 的代码:
public static string GetAppSetting(string name)
{
return ConfigurationRoot?[name]
?? ConfigurationRoot?["Values:" + name]
?? ConfigurationRoot?["APPSETTING_" + name]
?? ConfigurationManager.AppSettings[name];
}
public static string GetConnectionString(string name)
{
return ConfigurationRoot?.GetConnectionString(name)
?? ConfigurationRoot?.GetConnectionString("SQLAZURECONNSTR_" + name)
?? ConfigurationManager.ConnectionStrings[name].ConnectionString;
}
解决方案是在 DbContext 的 OnConfiguring 中添加对环境变量的支持
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (_loggerFactory != null)
{
if (Debugger.IsAttached)
{
optionsBuilder.UseLoggerFactory(_loggerFactory);
}
}
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
// this was the missing part
.AddEnvironmentVariables()
.Build();
var connectionString = configuration.GetConnectionString("xxx");
optionsBuilder.UseSqlServer(connectionString);
}