Проверка конечной точки с помощью CloudEvents v1.0 отличается от схемы доставки, такой как EventGridSchema и CustomInputSchema , описанной здесь.
В целях тестирования вы можете использовать Webhook.site в качестве обработчика конечной точки. На следующем экране показана отправка вызова OPTIONS с помощью EventGrid для подтверждения подтверждения:
Обратите внимание, что адрес для обработчик конечной точки должен быть https . Как вы можете видеть на картинке выше, есть заголовок webhook-request-callback . Скопируйте значение a, поместите его в браузер и отправьте. Вы должны получить следующий текст:
"Webhook succesfully validated as a subscription endpoint."
С этого момента веб-крючок может получать уведомления, см. Следующий экран:
Как видите, CloudEvent v1.0 требует реализации ответа HTTP OPTIONS для проверки конечной точки . Ниже приведен пример этой реализации:
string webhookcallback = req.Headers.GetValues("WebHook-Request-Callback")?.FirstOrDefault()?.Trim();
if(string.IsNullOrEmpty(webhookcallback) == false)
{
var hrm2 = req.CreateResponse(HttpStatusCode.OK);
hrm2.Headers.Add("WebHook-Request-Origin", "eventgrid.azure.net");
hrm2.Headers.Add("WebHook-Allowed-Rate", "120");
System.Threading.ThreadPool.QueueUserWorkItem(delegate (object state)
{
Task.Delay(5000).Wait();
using(var client = new HttpClient())
{
log.Warning($"{client.GetAsync(webhookcallback).Result.Content.ReadAsStringAsync().Result}");
}
});
return hrm2;
}
Поместите приведенный выше фрагмент кода в вашу функцию. Обратите внимание, что вызов WebHook-Request-Callback address не может быть в пределах вызова OPTIONS, это должно быть сделано после его ответа OK обратно на EventGrid, поэтому у нас есть некоторая задержка и фоновый поток. Будет хорошо, если EventGrid примет этот вызов в рамках вызова OPTIONS.