如何在运行时获取触发队列的名称?

How can I get the name of the triggering queue at runtime?

我有一个 C# WebJob,它使用 QueueTrigger 和自定义 INameResolver 从应用程序设置中查找队列名称。这部分按预期工作,但现在在方法体内,我需要知道从中接收触发消息的队列的名称。理想情况下,我希望能够在我的方法上添加一个特别命名的字符串参数,该参数将由 WebJobs SDK 填充触发队列名称,但 documentation 没有提及任何此类可绑定参数.

是否有另一种方法来实现这一点,最好不要在两个位置硬编码队列 name/pattern(即一次在 QueueTrigger 属性中,一次在方法主体中)或编写自定义字符串解析为 %patterns%?

手动调用我的 INameResolver 的代码

您可以向您的函数添加一个附加参数以绑定到队列,如下所示:

public static void MyFunction(
  [QueueTrigger("%name%")] string message,
  [Queue("%name%")] CloudQueue queue)
{
  string queueName = queue.Name;
}

如您所建议的替代方法 - 让您的自定义 INameResolver 实例可用于您的工作职能(例如通过 DI),然后只需调用 resolver.Resolve 即可获取名称。