Venkata Dorisala
Venkata Dorisala

Reputation: 5075

Read values from local.settings.json in VS 2017 Azure Function development

I am writing an Azure function in VS 2017. I need to set up a few custom configuration parameters. I added them in local.settings.json under Values.

{
   "IsEncrypted":false,
   "Values" : {
      "CustomUrl" : "www.google.com",
       "Keys": { 
           "Value1":"1",
           "Value2" :"2"
       }
   }
}

Now, ConfigurationManager.AppSettings["CustomUrl"] returns null.

I'm using:

Am I missing something?

Upvotes: 49

Views: 81901

Answers (7)

Vivek Nuna
Vivek Nuna

Reputation: 1

var value = Environment.GetEnvironmentVariable("key", EnvironmentVariableTarget.Process); should be the more appropriate answer, though EnvironmentVariableTarget.Process is the default value but it's more meaningful here.

Look at its EnvironmentVariableTarget declaration.

//
// Summary:
//     Specifies the location where an environment variable is stored or retrieved in
//     a set or get operation.
public enum EnvironmentVariableTarget
{
    //
    // Summary:
    //     The environment variable is stored or retrieved from the environment block associated
    //     with the current process.
    Process = 0,
    //
    // Summary:
    //     The environment variable is stored or retrieved from the HKEY_CURRENT_USER\Environment
    //     key in the Windows operating system registry. This value should be used on .NET
    //     implementations running on Windows systems only.
    User = 1,
    //
    // Summary:
    //     The environment variable is stored or retrieved from the HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session
    //     Manager\Environment key in the Windows operating system registry. This value
    //     should be used on .NET implementations running on Windows systems only.
    Machine = 2
}

Upvotes: 1

AlbertK
AlbertK

Reputation: 13227

Using .Net 6 (and probably some earlier versions) it is possible to inject IConfiguration into the constructor of the function.

public Function1(IConfiguration configuration)
{
    string setting = _configuration.GetValue<string>("MySetting");
}

MySetting must be in the Values section of local.settings.json:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
    "MySetting": "value"
  }
}

It works with Application settings in Azure Function App as well.

Upvotes: 8

Herberth Gomez
Herberth Gomez

Reputation: 317

Hey you mmight be able to read the properties while debugging, but once you go and try to deploy that in azure, those properties are not going to work anymore. Azure functions does not allow nested properties, you must use all of them inline in the "Values" option or in "ConnectionStrings". Look at this documentation as reference: https://learn.microsoft.com/en-us/azure/azure-functions/functions-how-to-use-azure-function-app-settings

Upvotes: 1

Ashish-BeJovial
Ashish-BeJovial

Reputation: 1867

If you are using TimeTrigger based Azure function than you can access your key (created in local.settings.json) from Azure Function as below.

[FunctionName("BackupTableStorageFunction")]
public static void Run([TimerTrigger("%BackUpTableStorageTriggerTime%")]TimerInfo myTimer, TraceWriter log, CancellationToken cancellationToken)

Upvotes: 6

Nivedha Lakshmanan
Nivedha Lakshmanan

Reputation: 307

Azure function copies the binaries to the bin folder and runs using the azure function cli, so it searches for the local.settings.json, so make sure you have set the "Copy to Output Directory" to "Copy Always"

enter image description here

Upvotes: 6

jayasurya_j
jayasurya_j

Reputation: 1617

Environment.GetEnvironmentVariable("key")

I was able to read values from local.settings.json using the above line of code.

Upvotes: 89

Fei Han
Fei Han

Reputation: 27825

Firstly, I create a sample and do a test with your local.settings.json data, as Mikhail and ahmelsayed said, it works fine.

Besides, as far as I know, Values collection is expected to be a Dictionary, if it contains any non-string values, it can cause Azure function can not read values from local.settings.json.

My Test:

ConfigurationManager.AppSettings["CustomUrl"] returns null with the following local.settings.json.

{
  "IsEncrypted": false,
  "Values": {
    "CustomUrl": "www.google.com",
    "testkey": {
      "name": "kname1",
      "value": "kval1"
    }
  }
}

enter image description here

Upvotes: 23

Related Questions