ASP.NET WebHooks işleyicileri

WebHooks istekleri bir WebHook alıcısı tarafından doğrulandıktan sonra, kullanıcı kodu yla işlenmeye hazırdır. Burası işleyicilerin devreye girildiği yer. İşleyiciler IWebHookHandler arabiriminden türeyen ancak genellikle doğrudan arabirimden türeyen webhookhandler sınıfını kullanır.

Bir WebHook isteği bir veya daha fazla işleyici tarafından işlenebilir. İşleyiciler, Sipariş'in basit bir tamsayı olduğu (1 ile 100 arasında olması önerilen) en düşükten en yükseğe giden kendi Sipariş özelliğine göre sırayla çağrılır:

WebHook İşleyici Sipariş Özellik Diyagramı

İşleyici isteğe bağlı olarak WebHookHandlerContext'da Yanıt özelliğini ayarlayabilir ve bu özellik işlemenin durmasına ve yanıtın WebHook'a HTTP yanıtı olarak geri gönderilmesine yol açar. Yukarıdaki durumda, B ve B'den daha yüksek bir sıraya sahip olduğu için İşleyici C çağrılmaz.

Yanıtı ayarlamak genellikle yalnızca yanıtın bilgileri kaynağı API'ye geri taşıyabileceği WebHook'lar için alakalıdır. Bu, örneğin Yanıtın WebHook'un geldiği kanala geri nakledildiği Slack WebHooks'taki durumdur. İşleyiciler, yalnızca belirli bir alıcıdan WebHooks almak istiyorlarsa Alıcı özelliğini ayarlayabilir. Alıcıyı ayarlamazlarsa hepsi için çağrılır.

Yanıtın diğer yaygın kullanımlarından biri, WebHook'un artık etkin olmadığını ve başka istek gönderilmemesi gerektiğini belirtmek için 410 Gone yanıtı kullanmaktır.

Varsayılan olarak bir işleyici tüm WebHook alıcıları tarafından çağrılır. Ancak, Alıcı özelliği işleyicinin adına ayarlanmışsa, bu işleyici yalnızca bu alıcıdan WebHook istekleri alır.

WebHook'u Işleme

Bir işleyici çağrıldığında, WebHook isteği hakkında bilgi içeren bir WebHookHandlerContext alır. Veriler, genellikle HTTP istek gövdesi, Veri özelliğinden kullanılabilir.

Verilerin türü genellikle JSON veya HTML form verileridir, ancak istenirse daha belirli bir türe döküm yapmak mümkündür. Örneğin, ASP.NET WebHooks tarafından oluşturulan özel WebHooks aşağıdaki gibi Tür CustomBildirimler döküm olabilir:

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

Sıralı İşlem

Yanıt birkaç saniye içinde oluşturulmazsa, çoğu WebHook gönderen kişi bir WebHook'u yeniden gönderir. Bu, işleyicinizin yeniden çağrılmaması için işlemi bu zaman dilimi içinde tamamlaması gerektiği anlamına gelir.

İşlem daha uzun sürerse veya ayrı olarak daha iyi işlenirse, WebHookQueueHandler WebHook isteğini sıraya (örneğin Azure Depolama Kuyruğu)göndermek için kullanılabilir.

WebHookQueueHandler uygulamasının anahattı burada verilmiştir:

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

        // Enqueue WebHookQueueContext to your queuing system of choice

        return Task.FromResult(true);
    }
}