如何在触发属性中基于dotnet核心的Azure函数中从settings.json读取配置值

时间:2018-12-22 09:13:28

标签: c# azure .net-core azure-functions azure-functions-core-tools

我有一个Azure Function v2(.NET Core)项目,在其中创建了队列触发类型的函数。

此队列触发器属性如下所示:

public static void Run(
          [QueueTrigger("myqueue-name",
          Connection = "Someconnectionstring")]string myQueueItem,
       ILogger log)

在上述代码段中-我想在本地运行时从myqueue-name文件中获取local.settings.json值,然后在应用程序设置中添加相同的配置值,并在Azure上运行时获取该值。 / p>

我搜索并找到了解决方案:Values from local.settings.json in Azure Functions

建议在%%之间引用配置密钥-如果我使用的是Azure Function v1(.NET Framework),这可以正常工作-但不幸的是,当我使用Azure的v2 .NET Core版本时,此方法不起作用功能。在settings.json文件中的[QueueTrigger]属性中使用可配置的值或azure中的appsettings时需要帮助

1 个答案:

答案 0 :(得分:0)

您也可以直接访问属性声明本身。在应用程序设置中,我有serviceBusConnectionString,并且我还在代码中使用了队列触发器

   public static async void Run([ServiceBusTrigger("orders", Connection = "serviceBusConnectionString")] Message myMessage, ILogger log)
   {
     //DoSomething
   }

enter image description here

编辑2: 因此,如果您还希望从appSettings中获取队列名称,只需创建一个INameResolver即可解析任何用%(百分号)符号包围的字符串。

 public static async void Run([ServiceBusTrigger("%orders%", Connection = "serviceBusConnectionString")] Message myMessage, ILogger log)
       {
         //DoSomething
       }

并编写这样的解析器方法

public class QueueNameResolver : INameResolver
{
    public string Resolve(string name)
    {
        return ConfigurationManager.AppSettings[name].ToString();
    }
}

然后在Program.cs文件中添加以下代码段

var host = new JobHost(new JobHostConfiguration
{
  NameResolver = new QueueNameResolver()
});
host.RunAndBlock();