在 Azure webhook 中访问 post 查询参数

Accessing post query params in Azure webhook

我正在尝试 从 POST 中读取 URL 查询参数进入我的 Azure webhook (PowerShell).

我的 webhook 正在接收 POST 请求,例如:

Content-Type: text/plain; charset=utf-8
POST https://{notificationUrl}?validationToken={opaqueTokenCreatedByMicrosoftGraph}

正如您所梳理的那样,这里的上下文是 Microsoft Graph subscription 的创建。但是,我不想用太多细节混淆这个 post,因为我认为我的问题足够笼统:如何在 Azure webhook 中读取 POST 参数。

附加到此 webhook (based on this one) 的 runbook 显然需要所有客户端数据通过一个名为 WebhookData 的参数传入。我能够阅读 WebhookData 中的 WebhookNameRequestBodyRequestHeader。但是,我不知道如何读取到达我的 webhook 的 POST 请求中的 URL 查询参数。

具体来说,我需要访问那个 validationToken。它没有出现在 WebhookData 中。我也试过从我的 runbook 中完全删除 Webhookdata 参数,但绝对没有任何东西进来。我还尝试添加 validationToken 参数,以及 WebhookData 参数,但是 validationToken 结果是空的。

我应该补充一点,连同来自 Graph 的 POST(不起作用),我正在使用 Postman 测试我的 runbook 并确保在 URL。同样,如果我将它包含在 POST 正文中,我可以读取它,但如果它是一个查询参数则不能。由于最终 Graph 将通过查询参数发送它,我想我必须先让它工作。

非常具体,Azure Runbooks,不支持查询字符串。 From the documentation:

To receive data from the client, the runbook supports a single parameter called WebhookData. This parameter defines an object containing data that the client includes in a POST request.

The WebhookData parameter has the following properties:

Property Description
WebhookName Name of the webhook.
RequestHeader Hashtable containing the headers of the incoming POST request.
RequestBody Body of the incoming POST request. This body keeps any data formatting, such as string, JSON, XML, or form-encoded. The runbook must be written to work with the data format that is expected.

Azure Runbooks 有 2 个部分,触发器和运行手册:

Runbook(右框)只接受单个 WebhookData 对象来管理 Azure Runbooks 将使用的变量和数据。

Webhooks(左框),处理触发、接收数据并将其传递给 Runbook。非常具体地,RequestBody 被指定为:

Body of the incoming POST request. This body keeps any data formatting, such as string, JSON, XML, or form-encoded.This body keeps any data formatting, such as string, JSON, XML, or form-encoded.

根据这个定义,非常具体地,即使 WebHooks 可以支持查询字符串,在这种情况下触发 Azure Runbooks 它们被明确忽略。


另外,如果最终的愿望是订阅 Microsoft Graph 事件,“更好”的方法是使用 Event Hubshandle notifications:

Using Azure Event Hubs to receive change notifications differs from webhooks in a few ways, including:

  • You don't rely on publicly exposed notification URLs. The Event Hubs SDK will relay the notifications to your application.
  • You don't need to reply to the notification URL validation. You can ignore the validation message that you receive.
  • You'll need to provision an Azure Event Hub.
  • You'll need to provision an Azure Key Vault.