How to read appsettings.json in my _layout.chtml

RazorModel View-ControllerConfigurationAppsettings

Razor Problem Overview


I cannot seem to figure out how to read values from the appsettings.json in my _Layout.chtml file.

Is it not just available, something like this? @Configuration["ApplicationInsights:InstrumentationKey"]

I created a new MVC project using razor pages.

fyi, i'm an mvc newbee - code samples help a lot.

Razor Solutions


Solution 1 - Razor

In .net core mvc you can inject the configuration by adding the following two lines at the top of your view:

@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration

You can then access the value like this:

@Configuration.GetSection("ApplicationInsights")["InstrumentationKey"]

Solution 2 - Razor

If you use the options pattern you can inject them into your view like this:

@using Microsoft.Extensions.Options
@inject IOptions<ApplicationInsightsOptions> 
ApplicationInsightsOptionsAccessor
@
{
   var instrumentationKey = 
        ApplicationInsightsOptionsAccessor.Value.InstrumentationKey;
}

Options pattern in ASP.NET Core

Solution 3 - Razor

Using ActionFilters you can interrupt the request and add the configuration variables maybe to the ViewBag so it becomes accessible from the views or from the _Layout.cshtml File.

For example, if the following configuration section is inside your appsettings.json

{
    "MyConfig": {
        "MyValue": "abc-def"
    }
}

In the code MyConfig.cs would be:

public class MyConfig
{
    public string MyValue{ get; set; }
}

First create a very simple ActionFilter which derives from IAsyncActionFilter as following :

public class SampleActionFilter : IAsyncActionFilter
{
    private MyConfig _options;
    public SampleActionFilter(IConfiguration configuration)
    {

        _options = new MyConfig();
        configuration.Bind(_options);
    }

    public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
    {
        ((Microsoft.AspNetCore.Mvc.Controller)context.Controller).ViewBag.MyConfig = _options;
        await next();
    }
}

Later in the Startup.ConfigureServices method change services.AddMvc to the following:

public void ConfigureServices(IServiceCollection services)
{

    //..........

    services.AddMvc(options=>
    {
        options.Filters.Add(new SampleActionFilter(
            Configuration.GetSection("MyConfig")
        ));
    });

    //..........

}

To access the values just simply in the _Layout.cshtml or other view you can type:

@ViewBag.MyConfig.MyValue

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser3693957View Question on Stackoverflow
Solution 1 - RazorRenéView Answer on Stackoverflow
Solution 2 - RazortoddmillernycView Answer on Stackoverflow
Solution 3 - RazorAmer SawanView Answer on Stackoverflow