Search code examples
c#asp.net-core-mvcappsettings

Access appsettings.json values in controller classes


Having trouble figuring out how to read appsettings.json values outside of the startup.cs. What I would like to do is, for instance, is in the _Layout.cshtml, add the site name from the config:

For example:

ViewData["SiteName"] = Configuration.GetValue<string>("SiteSettings:SiteName");

Or even better:

public class GlobalVars {
    public static string SiteName => Configuration.GetValue<string>("SiteSettings:SiteName");
}

Here's my code thus far:

[appsettings.json]

"SiteSettings": {
    "SiteName": "MySiteName"
}

[startup.cs]

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

    var siteName = Configuration.GetValue<string>("SiteSettings:SiteName");
}

public IConfigurationRoot Configuration { get; }

Maybe I'm reading the docs wrong, but I can't seem to expose the Configuration object outside of the Startup class.


Solution

  • In your Startup.cs

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddSingleton<IConfiguration>(Configuration);
        }
    

    then in your controller:

    public class ValuesController : Controller
    {
        IConfiguration configuration;
    
        public ValuesController(IConfiguration configuration)
        {
            this.configuration = configuration;
        }
    }