我有一个简单的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")
,表示连接字符串不能为空。
答案 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.json
或appsettings.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}}中的选项可以使用它们。 :)