c# - asp.net core 2.2 未使用 WebApp Azure 配置中设置的 ConnectionString
问题描述
我已将 asp.net core 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 的屏幕截图
解决方案
解决方案是在 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);
}
推荐阅读
- angular - 从 NPM 包中的 SCSS 文件导入的样式不适用于我的角度组件
- android - 如何在屏幕旋转时存储大量数据?
- spring-integration - 处理具有相同消息的连续 HTTP 调用
- python - Docker swarm 服务到服务调用
- html - 为什么我的 CSS 样式没有正确应用?
- android - 如何使用 XML 为 backgroundTint 设置动画?
- java - 无法理解重载的超级调用
- javascript - 使用嵌套回调设置 js 模块的属性
- react-native - 无法使用代理
- bootstrap-4 - 带有多列幻灯片的 Bootstrap 4 Carousel