There is a typo/wrong value set in your connection variables.
Which can be seen in this output you pasted:
Variable Value
ConnectionStrings:TestDb "Server=TestServer;Database=TestDb;Persist Security Info=True;User ID=TestUser;Password=testpassword;MultipleActiveResultSets=true"
This likely happend while setting the variable via
$env:ConnectionStrings:MyDb = """Server=..."""
the correct way is to set it without the quotation marks.
$env:ConnectionStrings:MyDb = "Server=..."
Old answer (for other users who may search for similar issues)
The convention for connection strings is SQLCONNSTR_
, MYSQLCONNSTR_
, SQLAZURECONNSTR_
and CUSTOMCONNSTR_
which are used by Azure Web Apps, but should also work for self-hosting, VMs or any other cloud provider.
So if you have an environment variable called CUSTOMCONNSTR_TestDb
it will be the same as defining it in appsettings.json in
{
"connectionStrings": {
"TestDb": "..."
}
}
It will also override the value inside it, if AddEnvironmentVariables()
is called after .UseJsonFile(...)
. Last registration wins.
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
// This one needs to be last
.AddEnvironmentVariables();
You can also use other variables to override configuration values. iirc. ASPNETCORE_
is the default prefix (but you can change it in the AddEnvironmentVariables("MY_")
).
So a ASPNETCORE_MySettings
overrides Configuration["MySettings"]
(or Configuration.Get("MySettings")
) and ASPNETCORE_My__Settings
(use double underscore for level hierarchy on Linux, read where :
is used to obtain the config – Linux disallows colon in variable names) overrides Configuration["My:Settings"]
so same as
{
"my": {
"settings": "..."
}
}
Unless they changed that recently.
FWIW: Environment variables/configuration key names are case-insensitive as far as I remember.