每当更新操作时,我都会使用Webhook将事件发布到Azure事件网格主题。但是,当我使用主题中的访问密钥对请求进行身份验证时,会看到类似
的错误我在做什么错了?
答案 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==
。