How to read Configuration Values from appsettings.json in ASP.NET Core

By FoxLearn 12/27/2024 8:01:50 AM   34
To access the values from the configuration file, you need to set up a configuration system in the Startup.cs class.

First, let's assume we have a configuration file appsettings.json that looks like this:

{
  "AppSettings": {
    "ApiKey": "abcd1234",
    "Environment": "Production"
  }
}

In this example, we want to access the ApiKey and Environment settings from the file.

1. Configure Settings in Startup.cs

In your Startup.cs file, you'll need to set up the configuration to read from the appsettings.json file.

public class Startup
{
    public IConfigurationRoot Configuration { get; set; }

    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

        Configuration = builder.Build();
    }

    public void ConfigureServices(IServiceCollection services)
    {
        // Registering MVC and configuration services
        services.AddMvc();

        // Add functionality to inject IOptions<T>
        services.AddOptions();

        // Register configuration settings so they can be injected
        services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
    }    
}

In the ConfigureServices method, we register our AppSettings configuration section with the dependency injection container so that it can be injected into controllers or services.

In .NET Core 2.0, the appsettings.json file is automatically registered by default. Additionally, you can register environment-specific configuration files (e.g., appsettings.Development.json or appsettings.Production.json) to provide different settings based on the environment, allowing for more flexible configuration management.

2. Create a POCO for Configuration

Next, define a Plain Old CLR Object (POCO) to represent your settings:

public class AppSettings
{
    public string ApiKey { get; set; }
    public string Environment { get; set; }
}

This class corresponds to the structure in appsettings.json, and it will hold the values from the configuration file.

3. Inject and Use Configuration in Controller

Once the settings are registered, you can inject them into your controllers.

public class HomeController : Controller
{
    private readonly IOptions<AppSettings> _appSettings;

    public HomeController(IOptions<AppSettings> appSettings)
    {
        _appSettings = appSettings;
    }

    public IActionResult Index()
    {
        var apiKey = _appSettings.Value.ApiKey;
        var environment = _appSettings.Value.Environment;

        ViewData["ApiKey"] = apiKey;
        ViewData["Environment"] = environment;

        return View();
    }
}

In this example, the HomeController injects IOptions<AppSettings>, allowing access to the configuration values. The Value property provides the actual settings from appsettings.json.

If you prefer not to use IOptions<T>, you can access configuration directly in your controllers:

public class HomeController : Controller
{
    private readonly IConfiguration _configuration;

    public HomeController(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public IActionResult Index()
    {
        var apiKey = _configuration["AppSettings:ApiKey"];
        var environment = _configuration["AppSettings:Environment"];

        ViewData["ApiKey"] = apiKey;
        ViewData["Environment"] = environment;

        return View();
    }
}

Here, the IConfigurationRoot service is injected directly, and you can retrieve values using the appropriate key path (e.g., "AppSettings:ApiKey").

Don't forget to install the Microsoft.Extensions.Options.ConfigurationExtensions to your project.