如何在我的_layout.chtml中阅读appsettings.json

时间:2018-02-25 22:44:05

标签: razor model-view-controller configuration appsettings

我似乎无法弄清楚如何从_Layout.chtml文件中的appsettings.json读取值。

它不仅仅是可用的,这样的吗? @Configuration [ “ApplicationInsights:InstrumentationKey”]

我使用剃刀页面创建了一个新的MVC项目。

fyi,我是mvc newbee - 代码示例有很多帮助。

3 个答案:

答案 0 :(得分:20)

在.net core mvc中,您可以通过在视图顶部添加以下两行来注入配置:

@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration

然后您可以像这样访问值:

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

答案 1 :(得分:0)

使用ActionFilters您可以中断请求并将配置变量添加到ViewBag,以便可以从视图或_Layout.cshtml文件中访问它。

例如,如果以下配置部分位于appsettings.json

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

代码MyConfig.cs将是:

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

首先创建一个非常简单的ActionFilter,它派生自IAsyncActionFilter,如下所示:

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();
    }
}

稍后Startup.ConfigureServices方法将services.AddMvc更改为以下内容:

public void ConfigureServices(IServiceCollection services)
{

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

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

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

}

只需在_Layout.cshtml或其他视图中输入值即可输入:

@ViewBag.MyConfig.MyValue

答案 2 :(得分:0)

如果使用选项模式,可以像这样将它们注入视图:

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

Options pattern in ASP.NET Core