使用ActionFilters,您可以中断请求并将配置变量添加到ViewBag,以便可以从视图或_Layout.cshtml 文件中访问它。
例如,如果以下配置部分位于您的 appsettings.json 中
{
"MyConfig": {
"MyValue": "abc-def"
}
}
在代码中MyConfig.cs 将是:
public class MyConfig
{
public string MyValue{ get; set; }
}
首先创建一个非常简单的从IAsyncActionFilter 派生的 ActionFilter,如下所示:
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