Condividi tramite


ricevitori webhook ASP.NET

La ricezione di WebHook dipende da chi è il mittente. A volte sono disponibili passaggi aggiuntivi che registrano un WebHook che verifica che il sottoscrittore sia in ascolto. Alcuni webhook forniscono un modello push-to-pull in cui la richiesta HTTP POST contiene solo un riferimento alle informazioni sull'evento da recuperare in modo indipendente. Spesso il modello di sicurezza varia parecchio.

Lo scopo di Microsoft ASP.NET WebHook è quello di semplificare e rendere più coerente l'api senza spendere molto tempo per capire come gestire qualsiasi variante particolare di WebHook.

Un ricevitore WebHook è responsabile dell'accettazione e della verifica dei webhook da un determinato mittente. Un ricevitore WebHook può supportare qualsiasi numero di webhook, ognuno con la propria configurazione. Ad esempio, il ricevitore WebHook GitHub può accettare webhook da qualsiasi numero di repository GitHub.

URI del ricevitore WebHook

Installando Microsoft ASP.NET WebHook, si ottiene un controller WebHook generale che accetta richieste WebHook da un numero di servizi aperto. Quando arriva una richiesta, seleziona il ricevitore appropriato installato per la gestione di un determinato mittente WebHook.

L'URI di questo controller è l'URI WebHook registrato con il servizio ed è del modulo:

https://<host>/api/webhooks/incoming/<receiver>/{id}

Per motivi di sicurezza, molti ricevitori WebHook richiedono che l'URI sia un URI https e in alcuni casi deve contenere anche un parametro di query aggiuntivo usato per applicare che solo le parti desiderate possono inviare webhook all'URI precedente.

Il <receiver> componente è il nome del ricevitore, ad esempio github o slack.

{ id} è un identificatore facoltativo che può essere usato per identificare una determinata configurazione del ricevitore WebHook. Questo può essere usato per registrare N WebHook con un ricevitore specifico. Ad esempio, i tre URI seguenti possono essere usati per registrare per tre webhook indipendenti:

https://<host>/api/webhooks/incoming/github
https://<host>/api/webhooks/incoming/github/12345
https://<host>/api/webhooks/incoming/github/54321

Installazione di un ricevitore WebHook

Per ricevere WebHook con Microsoft ASP.NET WebHook, è prima di tutto necessario installare il pacchetto Nuget per il provider o i provider WebHook da cui si desidera ricevere WebHook. I pacchetti Nuget sono denominati Microsoft.AspNet.WebHooks.Receivers.* dove l'ultima parte indica il servizio supportato. Ad esempio:

Microsoft.AspNet.WebHooks.Receivers.GitHub offre supporto per la ricezione di webhook da GitHub e Microsoft.AspNet.WebHooks.Receivers.Custom offre supporto per la ricezione di webhook generati da ASP.NET WebHook.

È possibile trovare supporto per Dropbox, GitHub, MailChimp, PayPal, Pusher, Salesforce, Slack, Stripe, Trello e WordPress, ma è possibile supportare qualsiasi numero di altri provider.

Configurazione di un ricevitore WebHook

I ricevitori WebHook sono configurati tramite l'interfaccia IWebHookReceiverConfig e specifiche implementazioni di tale interfaccia possono essere registrate usando qualsiasi modello di inserimento delle dipendenze. L'implementazione predefinita usa Impostazioni applicazione che possono essere impostate nel file Web.config oppure, se si usa Azure App Web, può essere impostata tramite il portale di Azure.

impostazioni app Azure

Il formato per le chiavi dell'impostazione dell'applicazione è il seguente:

MS_WebHookReceiverSecret_<receiver>

Il valore è un elenco delimitato da virgole di valori corrispondenti ai valori {id} per i quali sono stati registrati webhook, ad esempio:

MS_WebHookReceiverSecret_GitHub = <secret1>, 12345=<secret2>, 54321=<secret3>

Inizializzazione di un ricevitore WebHook

I ricevitori WebHook vengono inizializzati registrandoli, in genere nella classe statica WebApiConfig , ad esempio:

namespace WebHookReceivers
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            // Load receivers
            config.InitializeReceiveGitHubWebHooks();
        }
    }
}