ASP.NET receptores WebHooks
O recebimento de WebHooks depende de quem é o remetente. Às vezes, há etapas adicionais registrando um WebHook verificando se o assinante está realmente escutando. Alguns WebHooks fornecem um modelo push-to-pull em que a solicitação HTTP POST contém apenas uma referência às informações de evento que devem ser recuperadas independentemente. Geralmente, o modelo de segurança varia bastante.
A finalidade do Microsoft ASP.NET WebHooks é tornar mais simples e consistente conectar sua API sem gastar muito tempo descobrindo como lidar com qualquer variante específica de WebHooks.
Um receptor WebHook é responsável por aceitar e verificar webhooks de um remetente específico. Um receptor WebHook pode dar suporte a qualquer número de WebHooks, cada um com sua própria configuração. Por exemplo, o receptor Do WebHook do GitHub pode aceitar WebHooks de qualquer número de repositórios do GitHub.
Ao instalar o Microsoft ASP.NET WebHooks, você obtém um controlador WebHook geral que aceita solicitações de WebHook de um número aberto de serviços. Quando uma solicitação chega, ela escolhe o receptor apropriado que você instalou para lidar com um remetente WebHook específico.
O URI desse controlador é o URI do WebHook que você registra com o serviço e é do formulário:
https://<host>/api/webhooks/incoming/<receiver>/{id}
Por motivos de segurança, muitos receptores WebHook exigem que o URI seja um URI https e, em alguns casos, ele também deve conter um parâmetro de consulta adicional que é usado para impor que somente a parte pretendida possa enviar WebHooks para o URI acima.
O <receiver>
componente é o nome do receptor, por exemplo github
, ou slack
.
O {id} é um identificador opcional que pode ser usado para identificar uma configuração específica do receptor WebHook. Isso pode ser usado para registrar N WebHooks com um receptor específico. Por exemplo, os três URIs a seguir podem ser usados para se registrar em três WebHooks independentes:
https://<host>/api/webhooks/incoming/github
https://<host>/api/webhooks/incoming/github/12345
https://<host>/api/webhooks/incoming/github/54321
Para receber WebHooks usando o Microsoft ASP.NET WebHooks, primeiro instale o pacote Nuget para o provedor webHook ou provedores dos quais deseja receber WebHooks. Os pacotes Nuget são denominados Microsoft.AspNet.WebHooks.Receivers.* em que a última parte indica o serviço com suporte. Por exemplo
Microsoft.AspNet.WebHooks.Receivers.GitHub fornece suporte para receber WebHooks do GitHub e Microsoft.AspNet.WebHooks.Receivers.Custom fornece suporte para receber WebHooks gerados por webHooks ASP.NET.
Pronto para uso, você pode encontrar suporte para Dropbox, GitHub, MailChimp, PayPal, Pusher, Salesforce, Slack, Stripe, Trello e WordPress, mas é possível dar suporte a qualquer número de outros provedores.
Os receptores WebHook são configurados por meio da interface IWebHookReceiverConfig e implementações específicas dessa interface podem ser registradas usando qualquer modelo de injeção de dependência. A implementação padrão usa configurações de aplicativo que podem ser definidas no arquivo Web.config ou, se estiver usando o Azure Aplicativos Web, podem ser definidas por meio do Portal do Azure.
O formato das chaves de Configuração do Aplicativo é o seguinte:
MS_WebHookReceiverSecret_<receiver>
O valor é uma lista separada por vírgulas de valores que correspondem aos valores {id} para os quais os WebHooks foram registrados, por exemplo:
MS_WebHookReceiverSecret_GitHub = <secret1>, 12345=<secret2>, 54321=<secret3>
Os receptores webhook são inicializados registrando-os, normalmente na classe estática WebApiConfig , por exemplo:
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();
}
}
}