accessing appsetting.json values in startup.cs

Viewed 17276

I understand how to Configure services for appsettings.json and inject them into a controller. However, I need to use the values in the ConfigureServices when I configure Auth. How would I do this? See my sample below. Specifically this line:

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

Code:

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,
                    };
                });
        }
3 Answers

You can access this ConfigureServices method like this

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

For the above code to work you need to have POCO class called AADSettings with ClientId as a property

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

and in appsettings.json file, you need to have an entry like this

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

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"
  },
Related