ASP.NET WebHooks-Empfänger

Der Empfang von WebHooks hängt davon ab, wer der Absender ist. Manchmal werden zusätzliche Schritte zum Registrieren eines Webhooks ausgeführt, um zu überprüfen, ob der Abonnent wirklich zuhört. Einige Webhooks stellen ein Push-to-Pull-Modell bereit, bei dem die HTTP POST-Anforderung nur einen Verweis auf die Ereignisinformationen enthält, die dann unabhängig abgerufen werden sollen. Häufig variiert das Sicherheitsmodell recht stark.

Der Zweck von Microsoft ASP.NET WebHooks besteht darin, es sowohl einfacher als auch konsistenter zu machen, Ihre API zu verknüpfen, ohne viel Zeit zu investieren, um herauszufinden, wie eine bestimmte Variante von WebHooks behandelt werden kann.

Ein WebHook-Empfänger ist für das Akzeptieren und Überprüfen von WebHooks von einem bestimmten Absender verantwortlich. Ein WebHook-Empfänger kann eine beliebige Anzahl von WebHooks unterstützen, die jeweils mit einer eigenen Konfiguration ausgestattet sind. Beispielsweise kann der GitHub-WebHook-Empfänger WebHooks aus einer beliebigen Anzahl von GitHub-Repositorys akzeptieren.

WebHook-Empfänger-URIs

Durch die Installation von Microsoft ASP.NET WebHooks erhalten Sie einen allgemeinen WebHook-Controller, der WebHook-Anforderungen von einer offenen Anzahl von Diensten akzeptiert. Wenn eine Anforderung eingeht, wählt sie den entsprechenden Empfänger aus, den Sie für die Behandlung eines bestimmten WebHook-Absenders installiert haben.

Der URI dieses Controllers ist der WebHook-URI, den Sie beim Dienst registrieren, und hat folgendes Format:

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

Aus Sicherheitsgründen erfordern viele WebHook-Empfänger, dass der URI ein HTTPS-URI ist, und in einigen Fällen muss er auch einen zusätzlichen Abfrageparameter enthalten, der verwendet wird, um zu erzwingen, dass nur die beabsichtigte Partei WebHooks an den oben genannten URI senden kann.

Die <receiver> -Komponente ist der Name des Empfängers, z. B github . oder slack.

{ id} ist ein optionaler Bezeichner, der verwendet werden kann, um eine bestimmte WebHook-Empfängerkonfiguration zu identifizieren. Dies kann verwendet werden, um N-Webhooks bei einem bestimmten Empfänger zu registrieren. Beispielsweise können die folgenden drei URIs verwendet werden, um sich für drei unabhängige Webhooks zu registrieren:

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

Installieren eines WebHook-Empfängers

Um WebHooks mithilfe von Microsoft ASP.NET WebHooks zu empfangen, installieren Sie zuerst das NuGet-Paket für den Oder die WebHook-Anbieter, von dem Sie WebHooks erhalten möchten. Die NuGet-Pakete heißen Microsoft.AspNet.WebHooks.Receivers.* , wobei der letzte Teil den unterstützten Dienst angibt. Beispiel:

Microsoft.AspNet.WebHooks.Receivers.GitHub bietet Unterstützung für den Empfang von WebHooks von GitHub und Microsoft.AspNet.WebHooks.Receivers.Custom bietet Unterstützung für den Empfang von WebHooks, die von ASP.NET WebHooks generiert wurden.

Standardmäßig finden Sie Unterstützung für Dropbox, GitHub, MailChimp, PayPal, Pusher, Salesforce, Slack, Stripe, Trello und WordPress, aber es ist möglich, eine beliebige Anzahl anderer Anbieter zu unterstützen.

Konfigurieren eines WebHook-Empfängers

WebHook-Empfänger werden über die IWebHookReceiverConfig-Schnittstelle konfiguriert, und bestimmte Implementierungen dieser Schnittstelle können mithilfe eines beliebigen Abhängigkeitsinjektionsmodells registriert werden. Die Standardimplementierung verwendet Anwendungseinstellungen, die entweder in der Web.config-Datei festgelegt oder bei Verwendung von Azure Web-Apps über das Azure-Portal festgelegt werden können.

Azure-App-Einstellungen

Das Format für Anwendungseinstellungsschlüssel lautet wie folgt:

MS_WebHookReceiverSecret_<receiver>

Der Wert ist eine durch Trennzeichen getrennte Liste von Werten, die den {id} -Werten entsprechen, für die WebHooks registriert wurden, z. B.:

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

Initialisieren eines Webhookempfängers

WebHook-Empfänger werden initialisiert, indem sie registriert werden, in der Regel in der statischen WebApiConfig-Klasse , z. B.:

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