连接字符串

时间:2016-07-06 15:54:56

标签: azure asp.net-core asp.net-core-1.0

我有一个简单的ASP.NET Core 1.0应用程序,它将一些数据植入Azure中的SQL Server。我有2个数据库,一个用于开发,另一个用于生产(Azure SQL),我正在使用Identity。当我在我的本地计算机上运行我的应用程序时,它工作正常,但是当我部署它时,我得到错误500(内部服务器错误),这里没有进一步的解释是我的代码。

if (CurrentEnvironment.IsDevelopment())
        {
            services.AddDbContext<ApplicationDbContext>(options => 
                                                        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
        }
        else if (CurrentEnvironment.IsStaging() || CurrentEnvironment.IsProduction())
        {
            services.AddDbContext<ApplicationDbContext>(options =>
                                                        options.UseSqlServer(Environment.GetEnvironmentVariable("SQLCONNSTR_kConnectionString")));
        }

如果我使用Azure应用程序设置将环境设置从“生产”更改为“开发”,则表示错误位于Configuration.GetConnectionString("DefaultConnection"),表示连接字符串不能为空。

3 个答案:

答案 0 :(得分:1)

当您要根据环境变量设置变量时,可以使用特殊模式。

在Azure App Service中,您将连接字符串设置为&#34; DefaultConnection&#34;或&#34; SQLCONNSTR_kConnectionString&#34;分别,但你需要使用。因此,如果您的连接字符串是&#34; DefaultConnection&#34;,您的appsetting.json必须如下所示

"ConnectionStrings" : {
    "DefaultConnection" : "..."
}

当您使用Configuration.GetConnectionString("DefaultConnection")获取时(或者您可以通过Configuration["ConnectionStrings:DefaultConnection"]获取)。

如果从环境变量加载它,最好通过

覆盖默认连接字符串
 var builder = new ConfigurationBuilder()
            .SetBasePath(hostEnv.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{hostEnv.EnvironmentName}.json", optional: true, reloadOnChange: true);
            .AddEnvironmentVariables();

然后,环境变量会自动覆盖appsettings.jsonappsettings.Production.json中的设置。

如果您想通过Environment.GetEnvironmentVariable获取,则需要在Linux上Environment.GetEnvironmentVariable("ConnectionStrings__SQLCONNSTR_kConnectionString")和Windows上Environment.GetEnvironmentVariable("ConnectionStrings:SQLCONNSTR_kConnectionString")。它掌握在我的头顶,但约定类似于这个

答案 1 :(得分:1)

我可能会误解你的意思&#34; Azure SQL&#34;,但如果你使用托管的Azure DB,那么环境变量的前缀将是SQLAZURECONNSTR_而不是{{ 1}}。例如,如果您在Azure(IaaS)中拥有自己的VM,则会使用后者。

此外,它可能会帮助您分解您的组合线:

SQLCONNSTR_

分成不同的行,如下所示,然后您可以更容易地诊断问题。

services.AddDbContext<ApplicationDbContext>(options =>
                                                        options.UseSqlServer(Environment.GetEnvironmentVariable("SQLCONNSTR_kConnectionString")));

答案 2 :(得分:1)

感谢您的回复,实际上我解决了我的问题。从ASP.NET Core RC 2开始,我们必须使用

"publishOptions": {
"include": [
  "wwwroot",
  "Views",
  "Areas/**/Views",
  "appsettings.json",
  "web.config"
] },
<{1}}中的

选项可以使用它们。 :)