【问题标题】:asp.net core 2.2 is not using ConnectionString set in WebApp Azure configasp.net core 2.2 未使用 WebApp Azure 配置中设置的 ConnectionString
【发布时间】:2019-06-14 18:46:45
【问题描述】:

我已将 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 的屏幕截图

【问题讨论】:

标签: c# azure configuration connection-string asp.net-core-2.2


【解决方案1】:

解决方案是在 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);
    }

【讨论】:

    【解决方案2】:

    我想我在将我的天蓝色函数升级到“.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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-29
      • 1970-01-01
      • 1970-01-01
      • 2020-03-20
      • 2021-12-14
      • 1970-01-01
      • 2019-08-12
      • 1970-01-01
      相关资源
      最近更新 更多