ASP.NET manipuladores WebHooks
Depois que as solicitações de WebHooks tiverem sido validadas por um receptor WebHook, elas estarão prontas para serem processadas pelo código do usuário. É aí que entram os manipuladores . Os manipuladores derivam da interface IWebHookHandler , mas normalmente usam a classe WebHookHandler em vez de derivar diretamente da interface .
Uma solicitação do WebHook pode ser processada por um ou mais manipuladores. Os manipuladores são chamados em ordem com base em sua respectiva propriedade Order indo do mais baixo para o mais alto, em que Order é um inteiro simples (sugerido estar entre 1 e 100):
Opcionalmente, um manipulador pode definir a propriedade Response no WebHookHandlerContext, o que levará o processamento a parar e a resposta a ser enviada de volta como a resposta HTTP para o WebHook. No caso acima, o Manipulador C não será chamado porque tem uma ordem maior que B e B define a resposta.
A configuração da resposta normalmente só é relevante para WebHooks em que a resposta pode levar informações de volta para a API de origem. Esse é, por exemplo, o caso com o Slack WebHooks em que a resposta é postada de volta no canal de origem do WebHook. Os manipuladores podem definir a propriedade Receiver se quiserem receber somente WebHooks desse receptor específico. Se eles não definirem o receptor, eles serão chamados para todos eles.
Outro uso comum de uma resposta é usar uma resposta 410 Gone para indicar que o WebHook não está mais ativo e nenhuma solicitação adicional deve ser enviada.
Por padrão, um manipulador será chamado por todos os receptores WebHook. No entanto, se a propriedade Receiver estiver definida como o nome de um manipulador, esse manipulador receberá apenas solicitações de WebHook desse receptor.
Processando um WebHook
Quando um manipulador é chamado, ele obtém um WebHookHandlerContext que contém informações sobre a solicitação do WebHook. Os dados, normalmente o corpo da solicitação HTTP, estão disponíveis na propriedade Data .
O tipo dos dados normalmente são dados de formulário JSON ou HTML, mas é possível converter em um tipo mais específico, se desejado. Por exemplo, os WebHooks personalizados gerados por ASP.NET WebHooks podem ser convertidos no tipo CustomNotifications da seguinte maneira:
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);
}
}
Processamento enfileirado
A maioria dos remetentes do WebHook reenviará um WebHook se uma resposta não for gerada dentro de alguns segundos. Isso significa que o manipulador deve concluir o processamento dentro desse período para que ele não seja chamado novamente.
Se o processamento demorar mais ou for melhor tratado separadamente, o WebHookQueueHandler poderá ser usado para enviar a solicitação webHook para uma fila, por exemplo, Fila de Armazenamento do Azure.
Uma estrutura de tópicos de uma implementação de WebHookQueueHandler é fornecida aqui:
public class QueueHandler : WebHookQueueHandler
{
public override Task EnqueueAsync(WebHookQueueContext context)
{
// Enqueue WebHookQueueContext to your queuing system of choice
return Task.FromResult(true);
}
}
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de