Web Kancaları işleyicilerini ASP.NET

Web Kancaları istekleri bir Web Kancası alıcısı tarafından doğrulandıktan sonra, kullanıcı koduyla işlenmeye hazırdır. İşleyiciler burada devreye girer. İşleyiciler IWebHookHandler arabiriminden türetilir, ancak genellikle doğrudan arabirimden türetme yerine WebHookHandler sınıfını kullanır.

Web Kancası isteği bir veya daha fazla işleyici tarafından işlenebilir. İşleyiciler, Sıra özelliğinin en düşükten en yükseğe (1 ile 100 arasında olması önerilir) basit bir tamsayı olduğu sırasıyla çağrılır:

Web Kancası İşleyici sırası özellik diyagramı

İşleyici isteğe bağlı olarak WebHookHandlerContext üzerinde Response özelliğini ayarlayabilir. Bu özellik işlemenin durmasına ve yanıtın Web Kancası'na HTTP yanıtı olarak geri gönderilmesine yol açar. Yukarıdaki durumda, C İşleyicisi çağrılmayacak çünkü B'den daha yüksek bir sıralamaya sahip ve B yanıtı ayarlar.

Yanıtın ayarlanması genellikle yalnızca yanıtın kaynak API'ye bilgi taşıyabileceği Web Kancaları için geçerlidir. Bu, örneğin yanıtın Web Kancası'nın geldiği kanala geri gönderildiği Slack WebHooks'ta durumdur. İşleyiciler, yalnızca söz konusu alıcıdan Web Kancaları almak istediklerinde 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 de Web Kancası'nın 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, işleyici tüm Web Kancası alıcıları tarafından çağrılır. Ancak, Receiver özelliği bir işleyicinin adına ayarlanırsa, bu işleyici yalnızca bu alıcıdan Web Kancası isteklerini alır.

Web Kancasını İşleme

İşleyici çağrıldığında, WebHook isteği hakkında bilgi içeren bir WebHookHandlerContext alır. Genellikle HTTP isteği gövdesi olan veriler Data özelliğinden kullanılabilir.

Verilerin türü genellikle JSON veya HTML form verileridir, ancak isterseniz daha belirli bir türe yayın yapmak mümkündür. Örneğin, ASP.NET Web Kancaları tarafından oluşturulan özel Web Kancaları, CustomNotifications türüne aşağıdaki gibi yayınlanabilir:

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

Kuyruğa Alınmış İşleme

Yanıt birkaç saniye içinde oluşturulmazsa Çoğu Web Kancası göndereni bir Web Kancasını yeniden gönderir. Bu, işleyicinizin yeniden çağrılmaması için işlemeyi bu zaman dilimi içinde tamamlaması gerektiği anlamına gelir.

İşlem daha uzun sürüyorsa veya ayrı ayrı daha iyi işleniyorsa , WebHookQueueHandler bir kuyruğa web kancası isteği göndermek için kullanılabilir, örneğin Azure Depolama Kuyruğu.

WebHookQueueHandler uygulamasının ana hattı 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);
    }
}