Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

WebhookPublisherService.cs 1.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using System.Diagnostics.CodeAnalysis;
  2. namespace Diligent.WebAPI.Business.Services
  3. {
  4. [ExcludeFromCodeCoverage]
  5. public class WebhookPublisherService : IWebhookPublisherService
  6. {
  7. private readonly IWebhookSubscriptionService _subscriptionService;
  8. public WebhookPublisherService(IWebhookSubscriptionService subscriptionService)
  9. {
  10. _subscriptionService = subscriptionService;
  11. }
  12. public async Task PublishAsync(string webhookName, object data)
  13. {
  14. // Get all subscriptions
  15. var subscriptions = await _subscriptionService.GetAllSubscriptionsAsync(webhookName);
  16. if (subscriptions == null || subscriptions.Count == 0)
  17. return;
  18. // Send POST request to subscriptions
  19. // 1: define POST request
  20. var request = new RestRequest("", Method.Post);
  21. // 2: define request body
  22. var serializedOrder = JsonConvert.SerializeObject(data, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
  23. request.AddJsonBody(serializedOrder);
  24. // 3: define request headers
  25. request.AddHeader("Content-Type", "application/json");
  26. foreach (var subscription in subscriptions)
  27. {
  28. try
  29. {
  30. // 4: define client endpoint
  31. var client = new RestClient(subscription.WebhookURL);
  32. // 5: send
  33. await client.ExecuteAsync(request);
  34. }
  35. catch (Exception)
  36. {
  37. // if one subscription fail continue
  38. }
  39. }
  40. }
  41. }
  42. }