LearnAI ToolsCareerPractice BuildsPlayContact
Lesson 6518 min read

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; } = "";
}
Program.cs
builder.Services.Configure<JwtSettings>(builder.Configuration.GetSection("Jwt"));
Injected into a class
public class TokenService
{
private readonly JwtSettings settings;
public TokenService(IOptions<JwtSettings> options)
{
settings = options.Value;
}
}
Keep Secrets Out of appsettings.json

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.
Next Lesson →

Deployment