将事件从 Azure DevOps 发布到 Azure 事件网格

Publishing event from Azure DevOps to Azure Event Grid

每当更新操作时,我都使用 webhook 将事件发布到 Azure 事件网格主题。但是当我使用主题中的访问密钥对请求进行身份验证时,我看到类似

的错误

我做错了什么?

Reference for Azure docs

尝试以下操作:

https://<yourtopic>.<region>.eventgrid.azure.net/api/events?aeg-sas-key=<your url encoded key>

以下是有效负载的事件架构:

[
  {
    "topic": string,
    "subject": string,
    "id": string,
    "eventType": string,
    "eventTime": string,
    "data":{
      object-unique-to-each-publisher
    },
    "dataVersion": string,
    "metadataVersion": string
  }
]

更新:

输出绑定到 AEG 自定义主题的 HttpTrigger 函数示例:

run.csx:

#r "Newtonsoft.Json"
#r "Microsoft.Azure.EventGrid"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Microsoft.Azure.EventGrid.Models;

public static async Task<IActionResult> Run(JObject body, IAsyncCollector<EventGridEvent> outputEvents, ILogger log)
{
    log.LogInformation($"{body.ToString(Formatting.Indented)}");

    EventGridEvent ege = new EventGridEvent() {
        Topic = null,
        Id = (string)body["id"],
        EventType = (string)body["eventType"],
        EventTime = (DateTime)body["createdDate"],
        Data = body,
        DataVersion = "1",
        Subject = "abcd"
    };
    await outputEvents.AddAsync(ege);

    return (ActionResult)new NoContentResult(); 
}

function.json:

{
  "bindings": [
    {
      "authLevel": "function",
      "name": "body",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
         "post"
      ]
    },
    {
      "type": "eventGrid",
      "direction": "out",
      "name": "outputEvents",
      "topicEndpointUri": "AEG_TOPIC_XX_ENDPOINT",
      "topicKeySetting": "AEG_TOPIC_XX_KEY"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ]
}

enter code here

根据您的错误信息:

This is due to the reason: Invalid length for a Base-64 char array or string.

您的 url 编码密钥的长度可能不是 4 的倍数。

要解决此问题,请将 =s 添加到密钥的末尾,直到密钥的长度是 4 的倍数。

如您所附的 link 所示:

aeg-sas-key: XXXXXXXXXXXXXXXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==

原来的key是nDT4hgdEj9DpBeRr38arnnm5OFg,为了使它成为Base-64字符串,在它后面加了两个=,使之成为nDT4hgdEj9DpBeRr38arnnm5OFg==.