【问题标题】:How to read appsettings.json in my _layout.chtml如何在我的 _layout.chtml 中读取 appsettings.json
【发布时间】:2018-08-05 08:46:47
【问题描述】:

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

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

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

仅供参考,我是 mvc newbee - 代码示例很有帮助。

【问题讨论】:

    标签: razor model-view-controller configuration appsettings


    【解决方案1】:

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

    @using Microsoft.Extensions.Configuration
    @inject IConfiguration Configuration
    

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

    @Configuration.GetSection("ApplicationInsights")["InstrumentationKey"]
    

    【讨论】:

    • 也可以使用简写@Configuration["ApplicationInsights:InstrumentationKey"] 来访问这些值。
    【解决方案2】:

    如果您使用选项模式,您可以像这样将它们注入到您的视图中:

    @using Microsoft.Extensions.Options
    @inject IOptions<ApplicationInsightsOptions> 
    ApplicationInsightsOptionsAccessor
    @
    {
       var instrumentationKey = 
            ApplicationInsightsOptionsAccessor.Value.InstrumentationKey;
    }
    

    Options pattern in ASP.NET Core

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 这就是我要找的,谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 2018-12-31
      • 2022-06-10
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多