【问题标题】:accessing appsetting.json values in startup.cs访问 startup.cs 中的 appsetting.json 值
【发布时间】:2017-09-15 01:59:18
【问题描述】:

我了解如何为 appsettings.json 配置服务并将它们注入控制器。但是,当我配置 Auth 时,我需要使用 ConfigureServices 中的值。我该怎么做?请参阅下面的示例。特别是这一行:

option.clientId = /*Need client Id from appsettings.json*/

代码:

public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.Configure<AADSettings>(Configuration.GetSection("AADSettings"));
            services.Configure<APISettings>(Configuration.GetSection("APISettings"));

            // Add Authentication services.
            services.AddAuthentication(sharedOptions =>
            {
                sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
            })
                // Configure the OWIN pipeline to use cookie auth.
                .AddCookie()
                // Configure the OWIN pipeline to use OpenID Connect auth.
                .AddOpenIdConnect(option =>
                {
                    option.clientId = /*Need client Id from appsettings.json*/

                    option.Events = new OpenIdConnectEvents
                    {
                        OnRemoteFailure = OnAuthenticationFailed,
                    };
                });
        }

【问题讨论】:

    标签: c# asp.net-core-2.0


    【解决方案1】:

    Startup.cs:

    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
        
        public IConfiguration Configuration { get; }
        
    
        public void ConfigureServices(IServiceCollection services)
        {
       
        }
        public void Configure(IApplicationBuilder app, IWebHostEnvironment)
        {
             User = Configuration.GetSection("HangfireSettings:UserName").Value,
             Pass = Configuration.GetSection("HangfireSettings:Password").Value
        }
    }
    

    appsettings.json:

      "HangfireSettings": {
        "UserName": "admin",
        "Password": "admin"
      },
    

    【讨论】:

      【解决方案2】:

      你可以像这样访问这个 ConfigureServices 方法

      var config = Configuration.GetSection("AADSettings").Get<AADSettings>();
      option.clientId = config.ClientId;
      

      要使上述代码正常工作,您需要拥有名为 AADSettings 的 POCO 类,并将 ClientId 作为属性

      public class AADSettings
      {
       public string ClientId { get; set; }
      }
      

      在 appsettings.json 文件中,你需要有这样的条目

      "AADSettings": {
          "ClientId": "Client1",
      }
      

      【讨论】:

        【解决方案3】:

        假设在你的 appsettings.json 中你有一个这样的节点:

        "option": {
          "clientId": "example client id"
        }
        

        那么你应该可以通过以下代码访问它

        option.clientId = Configuration["option:clientId"]
        

        【讨论】:

        • “配置”从何而来?它没有定义。
        • 它通常在 Startup.cs 类的顶部声明,并从 IConfiguration Startup.cs public Startup(IConfiguration configuration, IHostingEnvironment env) { Configuration = configuration; _environment = env; } public IConfiguration Configuration { get; } 注入
        猜你喜欢
        • 2018-04-18
        • 1970-01-01
        • 1970-01-01
        • 2021-09-03
        • 1970-01-01
        • 2019-03-28
        • 1970-01-01
        • 2019-08-26
        • 1970-01-01
        相关资源
        最近更新 更多