Configuration & appsettings
Learn how ASP.NET Core manages configuration through appsettings.json, environment variables, and the options pattern.
appsettings.json
`appsettings.json` is where connection strings, API keys, and other settings live, kept separate from your code.
{ "ConnectionStrings": { "DefaultConnection": "Server=localhost;Database=TaskDb;Trusted_Connection=True;" }, "Jwt": { "Issuer": "PrograMinds", "Audience": "PrograMindsUsers" }}Environment-Specific Settings
`appsettings.Development.json` overrides values from the base file when running locally, letting you keep different settings per environment (Development, Staging, Production) without conditional code.
Reading Configuration
string? connectionString = builder.Configuration.GetConnectionString("DefaultConnection");string? issuer = builder.Configuration["Jwt:Issuer"];The Options Pattern
For anything beyond a couple of values, bind configuration to a strongly typed class instead of accessing raw strings everywhere.
public class JwtSettings{ public string Issuer { get; set; } = ""; public string Audience { get; set; } = "";}builder.Services.Configure<JwtSettings>(builder.Configuration.GetSection("Jwt"));public class TokenService{ private readonly JwtSettings settings;
public TokenService(IOptions<JwtSettings> options) { settings = options.Value; }}For local development, use the .NET Secret Manager (`dotnet user-secrets`) instead of committing real keys to appsettings.json. In production, use environment variables or a secrets manager like Azure Key Vault.
FAQs
Yes — ASP.NET Core's configuration system layers multiple sources, and environment variables take precedence over appsettings.json by default.
Summary
- appsettings.json holds application configuration separate from code.
- Environment-specific files override the base configuration per environment.
- The options pattern binds configuration to strongly typed classes for safer access.