Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Advertencia
ASP.NET WebHooks está en desuso y ya no recibirá actualizaciones ni correcciones de seguridad.
Una vez que un receptor de WebHook ha validado las solicitudes de WebHooks, estas están listas para ser procesadas por el código de usuario. Aquí es donde entran controladores . Los controladores derivan de la interfaz IWebHookHandler , pero normalmente usa la clase WebHookHandler en lugar de derivar directamente de la interfaz.
Uno o varios controladores pueden procesar una solicitud de WebHook. Los controladores se llaman en orden según su propiedad Order, que va de menor a mayor, donde Order es un entero simple (se sugiere que esté entre 1 y 100):
Un controlador puede establecer opcionalmente la propiedad Response en WebHookHandlerContext, lo que llevará al procesamiento a detener y la respuesta que se va a devolver como respuesta HTTP al WebHook. En el caso anterior, no se llamará al controlador C porque tiene un orden mayor que B y B establece la respuesta.
Establecer la respuesta normalmente solo es relevante para webHooks en los que la respuesta puede devolver información a la API de origen. Este es, por ejemplo, el caso de WebHooks de Slack en el que se devuelve la respuesta al canal desde el que procede el webHook. Los manejadores pueden establecer la propiedad Receiver si solo quieren recibir WebHooks de un receptor específico. Si no configuran el receptor, se aplica a todos ellos.
Otro uso común de una respuesta es usar una respuesta 410 Gone para indicar que el webHook ya no está activo y no se deben enviar más solicitudes.
De forma predeterminada, todos los receptores de WebHook llamarán a un controlador. Sin embargo, si la propiedad Receiver se establece en el nombre de un controlador, ese controlador solo recibirá solicitudes de WebHook de ese receptor.
Procesamiento de un webHook
Cuando se llama a un controlador, obtiene un WebHookHandlerContext que contiene información sobre la solicitud de WebHook. Los datos, normalmente el cuerpo de la solicitud HTTP, están disponibles en la propiedad Data .
El tipo de datos suele ser JSON o datos de formulario HTML, pero es posible convertir a un tipo más específico si lo desea. Por ejemplo, los webHooks personalizados generados por ASP.NET WebHooks se pueden convertir al tipo CustomNotifications de la siguiente manera:
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);
}
}
Procesamiento en cola
La mayoría de los remitentes de webHook volverán a enviar un webHook si no se genera una respuesta en unos segundos. Esto significa que el controlador debe completar el procesamiento dentro de ese período de tiempo para que no sea llamado de nuevo.
Si el procesamiento tarda más o se controla mejor por separado, la WebHookQueueHandler se puede usar para enviar la solicitud de WebHook a una cola, por ejemplo, Azure Storage Queue.
Aquí se proporciona un esquema de una implementación de WebHookQueueHandler :
public class QueueHandler : WebHookQueueHandler
{
public override Task EnqueueAsync(WebHookQueueContext context)
{
// Enqueue WebHookQueueContext to your queuing system of choice
return Task.FromResult(true);
}
}