Reading appsettings.json and Environment Variables in .NET 3.1
Goal
Read configuration from appsettings.json files and environment variables in .NET 3.1 console apps and Web APIs.
Setup
Install required packages:
dotnet add package Microsoft.Extensions.Configuration
dotnet add package Microsoft.Extensions.Configuration.FileExtensions
dotnet add package Microsoft.Extensions.Configuration.Json
Create appsettings.json:
{
"Settings": {
"Params": {
"Param1": "value 1",
"Param2": "value 2"
}
}
}
Console Application
Load configuration in Program.cs:
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
IConfiguration configuration = builder.Build();
Access values:
var param1 = configuration.GetSection("Settings").GetValue<string>("Params:Param1");
Web API
Configure in Program.cs:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, configBuilder) =>
{
configBuilder
.AddJsonFile("appsettings.json", optional: false)
}
)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Inject IConfiguration into controllers:
[Route("[controller]")]
[ApiController]
public class HealthController : ControllerBase
{
private readonly IConfiguration _configuration;
public HealthController(IConfiguration configuration)
{
_configuration = configuration;
}
}
Multiple Configuration Sources
When multiple sources contain the same key, last source wins.
Console Application
Install environment variables package:
dotnet add package Microsoft.Extensions.Configuration.EnvironmentVariables
Chain multiple sources:
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile("appsettings.secrets.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
Web API Environment-Specific Settings
Load settings based on ASPNETCORE_ENVIRONMENT:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, configBuilder) =>
{
configBuilder
.AddJsonFile("appsettings.json", optional: false)
.AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", optional: true);
}
)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});