обработчики веб-перехватчиков ASP.NET
После того как запросы веб-перехватчиков будут проверены получателем веб-перехватчиков, они готовы к обработке с помощью пользовательского кода. Именно здесь поступают обработчики . Обработчики являются производными от интерфейса IWebHookHandler , но обычно используют класс WebHookHandler , а не производные непосредственно от интерфейса .
Запрос веб-перехватчика может обрабатываться одним или несколькими обработчиками. Обработчики вызываются по порядку на основе соответствующего свойства Order , идушего от самого низкого к самому высокому, где Order — это простое целое число (рекомендуется иметь значение от 1 до 100):
При необходимости обработчик может задать свойство Response в WebHookHandlerContext, что приведет к остановке обработки и отправке ответа обратно в качестве ОТВЕТА HTTP на веб-перехватчик. В приведенном выше случае обработчик C не будет вызываться, так как он имеет более высокий порядок, чем B, и B задает ответ.
Настройка ответа обычно имеет значение только для веб-перехватчиков, где ответ может передавать информацию обратно в исходный API. Это относится, например, к веб-перехватчикам Slack, где ответ отправляется обратно в канал, откуда поступил веб-перехватчик. Обработчики могут задать свойство Receiver, если они хотят получать веб-перехватчики только от этого конкретного получателя. Если получатель не задан, он вызывается для всех них.
Еще один распространенный способ использования ответа — использовать ответ 410 Gone , чтобы указать, что веб-перехватчик больше не активен и больше не следует отправлять запросы.
По умолчанию обработчик будет вызываться всеми получателями веб-перехватчиков. Однако если для свойства Receiver задано имя обработчика, этот обработчик будет получать только запросы веб-перехватчика от этого получателя.
Обработка веб-перехватчика
При вызове обработчика он получает объект WebHookHandlerContext , содержащий сведения о запросе веб-перехватчика. Данные, как правило, текст HTTP-запроса, доступны в свойстве Data .
Типом данных обычно являются данные json или HTML-формы, но при необходимости можно привести к более конкретному типу. Например, пользовательские веб-перехватчики, созданные 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 для отправки запроса веб-перехватчика в очередь, например в очередь службы хранилища Azure.
Схема реализации WebHookQueueHandler приведена здесь:
public class QueueHandler : WebHookQueueHandler
{
public override Task EnqueueAsync(WebHookQueueContext context)
{
// Enqueue WebHookQueueContext to your queuing system of choice
return Task.FromResult(true);
}
}
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по