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

时间:2020-11-05 16:13:18

标签: azure-devops webhooks azure-eventgrid

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

的错误

Error

我在做什么错了?

Reference for Azure docs

2 个答案:

答案 0 :(得分:1)

尝试以下操作:

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

答案 1 :(得分:0)

根据您的错误消息:

这是由于以下原因:Base-64 char数组或字符串的长度无效。

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

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

如附件所示,链接:

aeg-sas-key: XXXXXXXXXXXXXXXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==

原始密钥为nDT4hgdEj9DpBeRr38arnnm5OFg,但是为了使其成为Base-64字符串,在其后添加了两个=,使其成为nDT4hgdEj9DpBeRr38arnnm5OFg==