如何在 _layout.chtml 中读取 appsettings.json 文件。

66

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

它不是像这样直接可用吗? @Configuration["ApplicationInsights:InstrumentationKey"]

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

顺便说一下,我是一个MVC新手 - 代码示例对我大有帮助。

3个回答

131
在 .net core mvc 中,您可以通过在视图顶部添加以下两行来注入配置:
```@inject Microsoft.Extensions.Configuration.IConfiguration Config```
```@using Microsoft.Extensions.Configuration```
@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration
你可以像这样访问值:
@Configuration.GetSection("ApplicationInsights")["InstrumentationKey"]

17
也可以使用简写方式 @Configuration["ApplicationInsights:InstrumentationKey"] 访问这些值。 - display-name
这个语法在 Blazor SPA .razor 页面中无法工作。有人知道怎么解决吗? - Nathan
或许对于你,@Nathan,@Configuration.GetSection("ApplicationInsights").GetValue<string>("InstrumentationKey") 是一个不错的选择。 - undefined

6
如果您使用选项模式,可以像这样将它们注入到视图中:
@using Microsoft.Extensions.Options
@inject IOptions<ApplicationInsightsOptions> 
ApplicationInsightsOptionsAccessor
@
{
   var instrumentationKey = 
        ApplicationInsightsOptionsAccessor.Value.InstrumentationKey;
}

ASP.NET Core中的Options模式


3
使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接