【问题标题】:How to read configuration values form settings.json in dotnet core based Azure function in trigger attribue如何在触发属性中读取基于 dotnet 核心的 Azure 函数中的 settings.json 配置值
【发布时间】:2019-05-22 11:50:27
【问题描述】:

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

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

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

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

我搜索了一下,找到了解决办法:Values from local.settings.json in Azure Functions

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

【问题讨论】:

  • 该解决方案也适用于 v2,您能否向我们展示错误信息或您遇到的任何可疑情况,例如本地调试时的控制台输出?
  • 似乎问题出在了其他地方,我再次检查了它似乎工作正常。我尝试的两个示例之间的唯一区别是 - 以前(当它不起作用时) - 我使用 CosmoDB 触发器,现在(有效)我​​正在使用 QueueTrigger - 我将尝试挖掘更多并发布更多详细信息@JerryLiu跨度>
  • 确认,我无法重现同样的问题。我发生了很多事情 - 所以不确定我发布时是什么问题,但现在工作正常。感谢@JerryLiu 的帮助

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


【解决方案1】:

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

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

编辑 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();

【讨论】:

  • 您提供的解决方案对我提出的问题没有帮助 - 请仔细阅读。我希望从属性声明中读取可配置值,而不是在方法内
  • 谢谢,但仍然不是我寻求的答案 - 我需要从 azure appsettings 设置值“orders”
  • 您在编辑 2 中提到的关于使用 %% 的解决方案在没有 Jerry 提到的 INameResolver 的情况下工作
  • @Jsinh 希望对您有所帮助
猜你喜欢
  • 2020-07-17
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多