The framework provides a default behavior for the delivery of webhooks to the registered recipients, but you can configure the behavior of the service to suit your needs.
The library Deveel.Webhooks depends from the Deveel.Webhooks.Sender library, which provides the needed functions to send webhooks to receivers: you will find the abstractions and helpers to configure the behavior of the webhook delivery to recipient systems, controlling aspects of the process like payload formatting, retries on failures, signatures.
You have several options to configure the service, and therefore you are free to chose the methodology that suits you best.
The WebhookSenderOptions
The WebhookSenderOptions class provides a set of properties that can be used to configure the behavior of the webhook sender.
The configurations are evolving with the versions of the framework, and the following ones apply to the current version (1.1.6) of the library.
var options =newWebhookSenderOptions { // When using the IHttpClientFactory, this is the name of the client // that will be used to send the webhooks HttpClientName ="my-http-client", // A set of default headers that will be added to the requests // sent to the webhook recipients DefaultHeaders =newDictionary<string,string> { // The default headers that will be added to the requests // sent to the webhook recipients ["X-Sender"] ="My-Webhook-Sender/1.0" }, // The default format of the payload that will be sent to the // webhook recipients (possible values are Json and Xml) DefaultFormat =WebhookPayloadFormat.Json, // The default timeout for the requests sent to the webhook // recipients to be completed, before being considered failed Timeout =TimeSpan.FromSeconds(30), // The default retry options for the requests sent to the webhook // recipients, that can be overridden by the specific subscription // configurations Retry =newWebhookRetryOptions { // The default number of retries that will be performed // after a failed request, before giving up MaxRetries =3, // The default delay between retries Delay =TimeSpan.FromSeconds(5), // The default timeout for each retry request // before being considered failed Timeout =TimeSpan.FromSeconds(3) }, // The default signature options for the requests sent to the webhook // recipients, that can be overridden by the specific subscription // configurations Singature =newWebhookSenderSignatureOptions { // The default location within the request where the signature // will be added (possible values are Header and QueryString) Location =WebhookSignatureLocation.Header, // The default name of the header that carries the signature, // when the location of the signature is the Header HeaderName ="X-Signature", // The default name of the query string parameter that carries // the signature, when the location of the signature is the QueryString QueryParameter ="signature", // The default algorithm that will be used to sign the requests // sent to the webhook recipients Algorithm =WebhookSignatureAlgorithm.HmacSha256, // The name of the query string parameter that will be used to // specify the algorithm used for the signature AlgorithmQueryParameter ="alg_sig" }};
Mind that every subscription can override some of the default options, and you can also provide a custom implementation of the IWebhookSender interface to customize the behavior of the delivery process.
IConfiguration Pattern
If you keep your configurations in an appsetting.json file, environment variables, secrets, implementing a typical pattern of the ASP.NET applications, you can invoke the overloads provided by Deveel.Webhook that access the available instances of IConfiguration.
usingSystem;usingMicrosoft.Extensions.Configuration;usingMicrosoft.Extensions.DependencyInjection;usingDeveel.Webhooks;namespaceExample {publicclassStartup {publicStartup(IConfiguration configuration) { Configuration = configuration; }publicIConfiguration Configuation { get; }publicvoidConfigure(IServiceCollection services) { // The configurations are specified in the 'Webhooks:Sender' // section of the configuration instance, and the service // will find the IConfiguration instance within the // container and use it to configure the serviceservices.AddWebhookSender<MyWebhook>("Webhooks:Sender"); } }}
After this, an instance of IOptions<WebhookDeliveryOptions> is available for injection in the webhook services or in your code.
Given the design of the service, it will also be possible to access a webhook-specific instance of IOptions<WebhookDeliveryOptions> for a given webhook type, using the IOptionsSnapshot<TOptions> service, using the type name of the webhook as the key (eg. IOptionsSnapshot<WebhookSenderOptions>.Get("MyWebhook")).
Manual Configuration
If you prefer to configure the service manually, you can use the AddWebhooks overload that accepts an instance of WebhookSenderOptions as parameter.