我似乎无法弄清楚如何从_Layout.chtml文件中的appsettings.json读取值。
它不仅仅是可用的,这样的吗? @Configuration [ “ApplicationInsights:InstrumentationKey”]
我使用剃刀页面创建了一个新的MVC项目。
fyi,我是mvc newbee - 代码示例有很多帮助。
答案 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;
}