Condividi tramite


gestori di webhook ASP.NET

Dopo aver convalidato le richieste webhook da un ricevitore WebHook, è pronto per l'elaborazione da parte del codice utente. Questo è il punto in cui i gestori si trovano. I gestori derivano dall'interfaccia IWebHookHandler , ma in genere usano la classe WebHookHandler anziché derivare direttamente dall'interfaccia.

Una richiesta WebHook può essere elaborata da uno o più gestori. I gestori vengono chiamati in ordine in base alla rispettiva proprietà Order che passa dal più basso al più alto in cui Order è un numero intero semplice (suggerito per essere compreso tra 1 e 100):

Diagramma delle proprietà dell'ordine del gestore WebHook

Un gestore può facoltativamente impostare la proprietà Response sul WebHookHandlerContext che consentirà all'elaborazione di arrestare e la risposta da inviare nuovamente come risposta HTTP al WebHook. Nel caso precedente, Handler C non verrà chiamato perché ha un ordine superiore a B e B imposta la risposta.

L'impostazione della risposta è in genere rilevante solo per i webhook in cui la risposta può riportare le informazioni all'API di origine. Si tratta, ad esempio, del caso con i webhook Slack in cui la risposta viene inviata al canale da cui proviene il WebHook. I gestori possono impostare la proprietà Ricevitore se vogliono ricevere solo WebHook da quel ricevitore specifico. Se non impostano il ricevitore che vengono chiamati per tutti.

Un altro uso comune di una risposta consiste nell'usare una risposta 410 Gone per indicare che il WebHook non è più attivo e non devono essere inviate ulteriori richieste.

Per impostazione predefinita, un gestore verrà chiamato da tutti i ricevitori WebHook. Tuttavia, se la proprietà Ricevitore è impostata sul nome di un gestore, tale gestore riceverà solo richieste WebHook da tale ricevitore.

Elaborazione di un webhook

Quando viene chiamato un gestore, ottiene un webhookHandlerContext contenente informazioni sulla richiesta WebHook. I dati, in genere il corpo della richiesta HTTP, è disponibile dalla proprietà Data .

Il tipo di dati è in genere JSON o HTML, ma è possibile eseguire il cast in un tipo più specifico se necessario. Ad esempio, i webhook personalizzati generati da ASP.NET WebHook possono essere distribuiti nel tipo CustomNotifications come indicato di seguito:

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);
    }
}

Elaborazione in coda

La maggior parte dei mittenti webhook eseguirà di nuovo un webhook se una risposta non viene generata entro pochi secondi. Ciò significa che il gestore deve completare l'elaborazione entro tale intervallo di tempo, in modo che non venga chiamato di nuovo.

Se l'elaborazione richiede più tempo o è meglio gestita separatamente, è possibile usare WebHookQueueHandler per inviare la richiesta WebHook a una coda, ad esempio Coda di archiviazione di Azure.

Una struttura di un'implementazione webHookQueueHandler viene fornita qui:

public class QueueHandler : WebHookQueueHandler
{
    public override Task EnqueueAsync(WebHookQueueContext context)
    {

        // Enqueue WebHookQueueContext to your queuing system of choice

        return Task.FromResult(true);
    }
}