How to read appsettings.json in my _layout.chtml

2019-04-05 09:52发布

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.

3条回答
贼婆χ
2楼-- · 2019-04-05 10:15

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"]
查看更多
\"骚年 ilove
3楼-- · 2019-04-05 10:18

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
查看更多
啃猪蹄的小仙女
4楼-- · 2019-04-05 10:36

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

查看更多
登录 后发表回答