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

use*_*957 19 model-view-controller configuration appsettings razor

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

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

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

fyi,我是一个mvc newbee - 代码示例帮助很多.

Ren*_*ené 36

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

@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration
Run Code Online (Sandbox Code Playgroud)

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

@Configuration.GetSection("ApplicationInsights")["InstrumentationKey"]
Run Code Online (Sandbox Code Playgroud)

  • 还可以使用简写`@Configuration["ApplicationInsights:InstrumentationKey"]`来访问这些值。 (14认同)

tod*_*nyc 6

如果您使用选项模式,您可以将它们注入到您的视图中,如下所示:

@using Microsoft.Extensions.Options
@inject IOptions<ApplicationInsightsOptions> 
ApplicationInsightsOptionsAccessor
@
{
   var instrumentationKey = 
        ApplicationInsightsOptionsAccessor.Value.InstrumentationKey;
}
Run Code Online (Sandbox Code Playgroud)

ASP.NET Core 中的选项模式


Ame*_*wan 3

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

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

{
    "MyConfig": {
        "MyValue": "abc-def"
    }
}
Run Code Online (Sandbox Code Playgroud)

代码中将MyConfig.cs是:

public class MyConfig
{
    public string MyValue{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

首先创建一个非常简单的 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

public void ConfigureServices(IServiceCollection services)
{

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

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

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

}
Run Code Online (Sandbox Code Playgroud)

要仅在_Layout.cshtml或其他视图中访问值,您可以键入:

@ViewBag.MyConfig.MyValue
Run Code Online (Sandbox Code Playgroud)