Using IConfiguration, [value] works but IsSettingEnabled for the same returns false

126 Views Asked by At

In the particular project I am working on, I am using the same pattern as I use in other projects successfully. However, with this one I am unable to successfully use IConfiguration's IsSettingEnabled.

Setup.cs

class Startup : FunctionsStartup
{
    public override void Configure(IFunctionsHostBuilder builder)
    {
    }

    public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
    {
        var context = builder.GetContext();

        builder.ConfigurationBuilder
            .AddJsonFile(Path.Combine(context.ApplicationRootPath, $"appsettings.{context.EnvironmentName}.json"), optional: true, reloadOnChange: false);
    }
}

appsettings.Development.json

{
    "ConfigName": "myconfig"
}

TheFunction.cs

public class TheFunction
{
    private IConfiguration _configuration = null;

    public TheFunction(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    [FunctionName("TheFunction")]
    public async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        string configName = "ConfigName";
        string configValue = _configuration[configName];
        bool configValueExists = _configuration.IsSettingEnabled(configName);
    }

When the code runs, configValue is "myconfig" as expected. However, configValueExists is False.

Is there something I missed in the setup? It's like whatever Dictionary IsSettingEnabled is using has not been built, and that the [] operator uses a different method of getting the value.

1

There are 1 best solutions below

0
Guru Stron On BEST ANSWER

Based on the source code Azure's IsSettingEnabled checks if settings value is not empty and can be interpreted as true boolean:

public static bool IsSettingEnabled(this IConfiguration configuration, string settingName)
{
    // check the target setting and return false (disabled) if the value exists
    // and is "falsey"
    string value = configuration[settingName];
    if (!string.IsNullOrEmpty(value) &&
        (string.Compare(value, "1", StringComparison.OrdinalIgnoreCase) == 0 ||
            string.Compare(value, "true", StringComparison.OrdinalIgnoreCase) == 0))
    {
        return true;
    }
            
    return false;
}

And "myconfig" definitely can not be interpreted as truthful in this context.