将事件从 Azure DevOps 发布到 Azure 事件网格
Publishing event from Azure DevOps to Azure Event Grid
每当更新操作时,我都使用 webhook 将事件发布到 Azure 事件网格主题。但是当我使用主题中的访问密钥对请求进行身份验证时,我看到类似
的错误
我做错了什么?
尝试以下操作:
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==
.
每当更新操作时,我都使用 webhook 将事件发布到 Azure 事件网格主题。但是当我使用主题中的访问密钥对请求进行身份验证时,我看到类似
的错误我做错了什么?
尝试以下操作:
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==
.