Я использую веб-перехватчик для публикации событий в теме сетки событий Azure при каждом обновлении действия. Но когда я использую ключ доступа из темы для аутентификации запроса, я вижу ошибку вроде
Что я делаю неправильно?
Я использую веб-перехватчик для публикации событий в теме сетки событий 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
}
]
ОБНОВЛЕНИЕ:
Пример функции HttpTrigger с привязкой вывода к настраиваемой теме AEG:
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
Согласно вашему сообщению об ошибке:
Это происходит по следующей причине: недопустимая длина массива или строки символов Base-64.
Длина ключа, закодированного для URL-адреса, не может быть кратной 4.
Чтобы решить эту проблему, добавляйте =
s в конец вашего ключа, пока длина ключа не станет кратной 4.
Как показано в прикрепленной ссылке:
aeg-sas-key: XXXXXXXXXXXXXXXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==
Первоначальный ключ был nDT4hgdEj9DpBeRr38arnnm5OFg
, но чтобы сделать его строкой Base-64, после него были добавлены два =
, что сделало его nDT4hgdEj9DpBeRr38arnnm5OFg==
.