Configuration.GetSection in Asp.Net Core 2.0 getting all settings
according to this post
https://github.com/aspnet/Configuration/issues/716
- the
GetSection("Name").Value
will return null, you must useGetChildren
to get the child items Bind
will populate the properties aginst theprovided object
, by default it maps againstpublic
properties, look at the update to supportprivate
properties.- try
Get<T>()
over bind, it will provide you a strongly typed instance of the configuration object
try a simple POCO of your class (no complex getter/setters, all public, no methods) and then take it from there
Update:
From .net core 2.1 BindNonPublicProperties added to BinderOptions
, so if set to true (default is false) the binder will attempt to set all non read-only properties.
var yourPoco = new PocoClass();
Configuration.GetSection("SectionName").Bind(yourPoco, c => c.BindNonPublicProperties = true)
I understand the answer has been accepted. However, providing proper example code, just in case anyone looking to understand a bit more...
It is quite straight forward to bind custom strong type configuration. ie. configuration json looks like below
{
"AppSettings": {
"v": true,
"SmsSettings": {
"FromPhone": "9145670987",
"StartMessagePart": "Dear user, You have requested info from us on starting",
"EndMessagePart": "Thank you."
},
"Auth2Keys": {
"Google": {
"ClientId": "",
"ClientSecret": ""
},
"Microsoft": {
"ClientId": "",
"ClientSecret": ""
},
"JWT": {
"SecretKey": "",
"Issuer": ""
}
}
}
}
and your C# classes looks like
public class SmsSettings{
public string FromPhone { get; set;}
public string StartMessagePart { get; set;}
public string EndMessagePart { get; set;}
}
public class ClientSecretKeys
{
public string ClientId { get; set; }
public string ClientSecret { get; set; }
}
public class JWTKeys
{
public string SecretKey { get; set; }
public string Issuer { get; set; }
}
public class Auth2Keys
{
public ClientSecretKeys Google { get; set; }
public ClientSecretKeys Microsoft { get; set; }
public JWTKeys JWT { get; set; }
}
You can get the section by GetSection("sectionNameWithPath")
and then Convert to strong type by calling Get<T>()
;
var smsSettings = Configuration.GetSection("AppSettings:SmsSettings").Get<SmsSettings>();
var auth2Keys= Configuration.GetSection("AppSettings:Auth2Keys").Get<Auth2Keys>();
For simple string values
var isDebugMode = Configuration.GetValue("AppSettings:IsDebugMode");
Hope this helps...