Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Предупреждение
ASP.NET WebHooks устаревший и больше не будет получать обновления или патчи безопасности.
После того как запросы WebHooks будут проверены приемником WebHook, они готовы к обработке пользовательским кодом. Вот где приходят обработчики . Обработчики основаны на интерфейсе IWebHookHandler, но обычно используют класс WebHookHandler вместо прямого наследования от интерфейса.
Запрос вебхука может обрабатываться одним или несколькими обработчиками. Обработчики вызываются в порядке соответствующего свойства Order от самого низкого до самого высокого, где свойство Order является простым целым числом (рекомендуется задать значение от 1 до 100).
Обработчик может при необходимости задать свойство Response в WebHookHandlerContext, которое приведет к остановке обработки и отправке ответа обратно в качестве HTTP-ответа на веб-перехватчик. В приведенном выше случае обработчик C не будет вызываться, так как он имеет более высокий порядок, чем B и B задает ответ.
Настройка ответа обычно относится только к веб-перехватчикам, где ответ может возвращать информацию в исходный API. Это, например, относится к WebHooks в Slack, где ответ отправляется обратно в канал, из которого пришёл WebHook. Обработчики могут задать свойство Приемника, если они хотят получать WebHooks от этого конкретного Приемника. Если они не задают приемник, то вызываются по умолчанию для всех.
Один из распространенных способов использования ответа — это ответ 410 Gone, чтобы указать, что вебхук больше не активен, и дальнейшие запросы не должны быть отправлены.
По умолчанию обработчик будет вызываться всеми приемниками веб-хука. Однако если свойству Receiver присвоено имя обработчика, обработчик получит только запросы WebHook от этого получателя.
Обработка вебхука
При вызове обработчика он получает WebHookHandlerContext, содержащий сведения о запросе WebHook. Данные, как правило, текст HTTP-запроса, доступны из свойства Data .
Тип данных обычно представляет собой данные JSON или HTML-формы, но при желании можно привести к более конкретному типу. Например, WebHooks, созданные с помощью ASP.NET для пользовательских целей, можно привести к типу CustomNotifications следующим образом:
public class MyWebHookHandler : WebHookHandler
{
public MyWebHookHandler()
{
this.Receiver = "custom";
}
public override Task ExecuteAsync(string generator, WebHookHandlerContext context)
{
CustomNotifications notifications = context.GetDataOrDefault<CustomNotifications>();
foreach (var notification in notifications.Notifications)
{
...
}
return Task.FromResult(true);
}
}
Обработка в очереди
Большинство отправителей веб-перехватчиков повторно отправляет веб-перехватчик, если ответ не создается в течение нескольких секунд. Это означает, что обработчик должен завершить обработку в течение этого интервала времени, чтобы не вызывать его снова.
Если обработка занимает больше времени или лучше обрабатывается отдельно, WebHookQueueHandler можно использовать для отправки запроса WebHook в очередь, например в очередь Azure Storage.
Здесь представлена структура реализации WebHookQueueHandler :
public class QueueHandler : WebHookQueueHandler
{
public override Task EnqueueAsync(WebHookQueueContext context)
{
// Enqueue WebHookQueueContext to your queuing system of choice
return Task.FromResult(true);
}
}