我似乎无法弄清楚如何在我的_Layout.chtml文件中读取appsettings.json中的值。
它不是像这样直接可用吗? @Configuration["ApplicationInsights:InstrumentationKey"]
我使用razor页面创建了一个新的MVC项目。
顺便说一下,我是一个MVC新手 - 代码示例对我大有帮助。
我似乎无法弄清楚如何在我的_Layout.chtml文件中读取appsettings.json中的值。
它不是像这样直接可用吗? @Configuration["ApplicationInsights:InstrumentationKey"]
我使用razor页面创建了一个新的MVC项目。
顺便说一下,我是一个MVC新手 - 代码示例对我大有帮助。
@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration
你可以像这样访问值:@Configuration.GetSection("ApplicationInsights")["InstrumentationKey"]
@using Microsoft.Extensions.Options
@inject IOptions<ApplicationInsightsOptions>
ApplicationInsightsOptionsAccessor
@
{
var instrumentationKey =
ApplicationInsightsOptionsAccessor.Value.InstrumentationKey;
}
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
@Configuration["ApplicationInsights:InstrumentationKey"]
访问这些值。 - display-name@Configuration.GetSection("ApplicationInsights").GetValue<string>("InstrumentationKey")
是一个不错的选择。 - undefined