From 842a6d66f1b366e08b16d4ad7882c4ea2059a336 Mon Sep 17 00:00:00 2001 From: Zeegaan Date: Wed, 6 Dec 2023 10:43:02 +0100 Subject: [PATCH 01/13] Use named HttpClients --- src/Umbraco.Core/Constants-HttpClients.cs | 5 +++++ .../BackgroundJobs/Jobs/WebhookFiring.cs | 10 +++++----- .../DependencyInjection/UmbracoBuilderExtensions.cs | 2 +- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Core/Constants-HttpClients.cs b/src/Umbraco.Core/Constants-HttpClients.cs index 677f4420856d..9314671d80e5 100644 --- a/src/Umbraco.Core/Constants-HttpClients.cs +++ b/src/Umbraco.Core/Constants-HttpClients.cs @@ -14,5 +14,10 @@ public static class HttpClients /// Name for http client which ignores certificate errors. /// public const string IgnoreCertificateErrors = "Umbraco:HttpClients:IgnoreCertificateErrors"; + + /// + /// Name for http client which sends webhook requests. + /// + public const string WebhookFiring = "Umbraco:HttpClients:WebhookFiring"; } } diff --git a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs index 11eaa3bb8a31..0ce119ffc463 100644 --- a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs +++ b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs @@ -15,11 +15,11 @@ public class WebhookFiring : IRecurringBackgroundJob { private readonly ILogger _logger; private readonly IWebhookRequestService _webhookRequestService; - private readonly IJsonSerializer _jsonSerializer; private readonly IWebhookLogFactory _webhookLogFactory; private readonly IWebhookLogService _webhookLogService; private readonly IWebhookService _webHookService; private readonly ICoreScopeProvider _coreScopeProvider; + private readonly IHttpClientFactory _httpClientFactory; private WebhookSettings _webhookSettings; public TimeSpan Period => _webhookSettings.Period; @@ -32,20 +32,20 @@ public event EventHandler PeriodChanged { add { } remove { } } public WebhookFiring( ILogger logger, IWebhookRequestService webhookRequestService, - IJsonSerializer jsonSerializer, IWebhookLogFactory webhookLogFactory, IWebhookLogService webhookLogService, IWebhookService webHookService, IOptionsMonitor webhookSettings, - ICoreScopeProvider coreScopeProvider) + ICoreScopeProvider coreScopeProvider, + IHttpClientFactory httpClientFactory) { _logger = logger; _webhookRequestService = webhookRequestService; - _jsonSerializer = jsonSerializer; _webhookLogFactory = webhookLogFactory; _webhookLogService = webhookLogService; _webHookService = webHookService; _coreScopeProvider = coreScopeProvider; + _httpClientFactory = httpClientFactory; _webhookSettings = webhookSettings.CurrentValue; webhookSettings.OnChange(x => _webhookSettings = x); } @@ -90,7 +90,7 @@ await Task.WhenAll(requests.Select(request => private async Task SendRequestAsync(IWebhook webhook, string eventName, string? serializedObject, int retryCount, CancellationToken cancellationToken) { - using var httpClient = new HttpClient(); + using HttpClient httpClient = _httpClientFactory.CreateClient(Constants.HttpClients.WebhookFiring); var stringContent = new StringContent(serializedObject ?? string.Empty, Encoding.UTF8, MediaTypeNames.Application.Json); stringContent.Headers.TryAddWithoutValidation("Umb-Webhook-Event", eventName); diff --git a/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs b/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs index 40436fd798dd..619f92272c29 100644 --- a/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs +++ b/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs @@ -10,7 +10,6 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; -using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Serilog.Extensions.Logging; @@ -261,6 +260,7 @@ private static IUmbracoBuilder AddHttpClients(this IUmbracoBuilder builder) ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator, }); + builder.Services.AddHttpClient(); return builder; } From f2185502565251f8fd503cd6653311f8788daba7 Mon Sep 17 00:00:00 2001 From: Zeegaan Date: Wed, 6 Dec 2023 11:15:34 +0100 Subject: [PATCH 02/13] Register as named client --- src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs | 1 - .../DependencyInjection/UmbracoBuilderExtensions.cs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs index 0ce119ffc463..5f0e9b28c829 100644 --- a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs +++ b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs @@ -6,7 +6,6 @@ using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Scoping; -using Umbraco.Cms.Core.Serialization; using Umbraco.Cms.Core.Services; namespace Umbraco.Cms.Infrastructure.BackgroundJobs.Jobs; diff --git a/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs b/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs index 619f92272c29..8e5c2af9ff38 100644 --- a/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs +++ b/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs @@ -260,7 +260,7 @@ private static IUmbracoBuilder AddHttpClients(this IUmbracoBuilder builder) ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator, }); - builder.Services.AddHttpClient(); + builder.Services.AddHttpClient(Constants.HttpClients.WebhookFiring); return builder; } From 9bf9588a9f619503c4e0fcd6524e5fa16aec1fe4 Mon Sep 17 00:00:00 2001 From: Zeegaan Date: Wed, 6 Dec 2023 12:22:00 +0100 Subject: [PATCH 03/13] Set headers on request message. --- .../BackgroundJobs/Jobs/WebhookFiring.cs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs index 5f0e9b28c829..b0d345be58aa 100644 --- a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs +++ b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs @@ -91,18 +91,27 @@ await Task.WhenAll(requests.Select(request => { using HttpClient httpClient = _httpClientFactory.CreateClient(Constants.HttpClients.WebhookFiring); - var stringContent = new StringContent(serializedObject ?? string.Empty, Encoding.UTF8, MediaTypeNames.Application.Json); - stringContent.Headers.TryAddWithoutValidation("Umb-Webhook-Event", eventName); + var request = new HttpRequestMessage(HttpMethod.Post, webhook.Url) + { + Version = httpClient.DefaultRequestVersion, VersionPolicy = httpClient.DefaultVersionPolicy, + }; + + // Add headers + request.Headers.TryAddWithoutValidation("Umb-Webhook-Event", eventName); foreach (KeyValuePair header in webhook.Headers) { - stringContent.Headers.TryAddWithoutValidation(header.Key, header.Value); + request.Headers.TryAddWithoutValidation(header.Key, header.Value); } + // Set content + request.Content = new StringContent(serializedObject ?? string.Empty, Encoding.UTF8, MediaTypeNames.Application.Json); + + // Send request HttpResponseMessage? response = null; try { - response = await httpClient.PostAsync(webhook.Url, stringContent, cancellationToken); + response = await httpClient.SendAsync(request, cancellationToken); } catch (Exception ex) { From 925f86b182fcea3c24de23c1dd7f2e292b46bc02 Mon Sep 17 00:00:00 2001 From: Zeegaan Date: Wed, 6 Dec 2023 12:41:28 +0100 Subject: [PATCH 04/13] Add User agent header to http client --- .../DependencyInjection/UmbracoBuilderExtensions.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs b/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs index 8e5c2af9ff38..da530eba4295 100644 --- a/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs +++ b/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs @@ -1,4 +1,5 @@ using System.Data.Common; +using System.Net.Http.Headers; using System.Reflection; using Dazinator.Extensions.FileProviders.GlobPatternFilter; using Microsoft.AspNetCore.Builder; @@ -22,6 +23,7 @@ using Umbraco.Cms.Core.Blocks; using Umbraco.Cms.Core.Cache; using Umbraco.Cms.Core.Composing; +using Umbraco.Cms.Core.Configuration; using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.DependencyInjection; using Umbraco.Cms.Core.Diagnostics; @@ -260,7 +262,11 @@ private static IUmbracoBuilder AddHttpClients(this IUmbracoBuilder builder) ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator, }); - builder.Services.AddHttpClient(Constants.HttpClients.WebhookFiring); + builder.Services.AddHttpClient(Constants.HttpClients.WebhookFiring, (services, client) => + { + var productVersion = services.GetRequiredService().SemanticVersion.ToSemanticStringWithoutBuild(); + client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("Umbraco", productVersion)); + }); return builder; } From 76a72b1efddeebedf0cbd2b8f711c60ca376a0a2 Mon Sep 17 00:00:00 2001 From: Zeegaan Date: Wed, 6 Dec 2023 13:28:33 +0100 Subject: [PATCH 05/13] Add headers within Try-catch --- .../BackgroundJobs/Jobs/WebhookFiring.cs | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs index b0d345be58aa..2a7d609d848e 100644 --- a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs +++ b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs @@ -93,24 +93,25 @@ await Task.WhenAll(requests.Select(request => var request = new HttpRequestMessage(HttpMethod.Post, webhook.Url) { - Version = httpClient.DefaultRequestVersion, VersionPolicy = httpClient.DefaultVersionPolicy, + Version = httpClient.DefaultRequestVersion, + VersionPolicy = httpClient.DefaultVersionPolicy, }; - // Add headers - request.Headers.TryAddWithoutValidation("Umb-Webhook-Event", eventName); - - foreach (KeyValuePair header in webhook.Headers) - { - request.Headers.TryAddWithoutValidation(header.Key, header.Value); - } - - // Set content - request.Content = new StringContent(serializedObject ?? string.Empty, Encoding.UTF8, MediaTypeNames.Application.Json); - - // Send request HttpResponseMessage? response = null; try { + // Add headers + request.Headers.Add("Umb-Webhook-Event", eventName); + + foreach (KeyValuePair header in webhook.Headers) + { + request.Headers.Add(header.Key, header.Value); + } + + // Set content + request.Content = new StringContent(serializedObject ?? string.Empty, Encoding.UTF8, MediaTypeNames.Application.Json); + + // Send request response = await httpClient.SendAsync(request, cancellationToken); } catch (Exception ex) From f4ed0f36439a59e6d90edcac1cbe7c9fe9f18865 Mon Sep 17 00:00:00 2001 From: Zeegaan Date: Wed, 6 Dec 2023 13:34:00 +0100 Subject: [PATCH 06/13] Add using for HttpResponseMessage --- .../BackgroundJobs/Jobs/WebhookFiring.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs index 2a7d609d848e..26ca0baea34c 100644 --- a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs +++ b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs @@ -71,8 +71,7 @@ await Task.WhenAll(requests.Select(request => return; } - HttpResponseMessage? response = await SendRequestAsync(webhook, request.EventAlias, request.RequestObject, request.RetryCount, CancellationToken.None); - + using HttpResponseMessage? response = await SendRequestAsync(webhook, request.EventAlias, request.RequestObject, request.RetryCount, CancellationToken.None); if ((response?.IsSuccessStatusCode ?? false) || request.RetryCount >= _webhookSettings.MaximumRetries) { await _webhookRequestService.DeleteAsync(request); From 5c836e92147729dcc2cc8c586f85560e49326406 Mon Sep 17 00:00:00 2001 From: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com> Date: Wed, 6 Dec 2023 13:46:18 +0100 Subject: [PATCH 07/13] Update src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs Co-authored-by: Ronald Barendse --- src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs index 26ca0baea34c..c57f4e08cf98 100644 --- a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs +++ b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs @@ -90,7 +90,7 @@ await Task.WhenAll(requests.Select(request => { using HttpClient httpClient = _httpClientFactory.CreateClient(Constants.HttpClients.WebhookFiring); - var request = new HttpRequestMessage(HttpMethod.Post, webhook.Url) + using var request = new HttpRequestMessage(HttpMethod.Post, webhook.Url) { Version = httpClient.DefaultRequestVersion, VersionPolicy = httpClient.DefaultVersionPolicy, From 197cb032aafc5dabc0782118f7a08b287b2c8de7 Mon Sep 17 00:00:00 2001 From: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com> Date: Wed, 6 Dec 2023 13:47:20 +0100 Subject: [PATCH 08/13] Update src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs Co-authored-by: Kenn Jacobsen --- src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs index c57f4e08cf98..ac2dbb03ac84 100644 --- a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs +++ b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs @@ -101,6 +101,7 @@ await Task.WhenAll(requests.Select(request => { // Add headers request.Headers.Add("Umb-Webhook-Event", eventName); + request.Headers.Add("Umb-Webhook-RetryCount", retryCount.ToString()); foreach (KeyValuePair header in webhook.Headers) { From 533ed1318244065b5ab946ca0d9040650960d4c1 Mon Sep 17 00:00:00 2001 From: Zeegaan Date: Wed, 6 Dec 2023 13:47:54 +0100 Subject: [PATCH 09/13] Log key instead of entire webhook --- .../BackgroundJobs/Jobs/WebhookFiring.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs index 26ca0baea34c..ba5c7c301a4a 100644 --- a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs +++ b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs @@ -101,6 +101,7 @@ await Task.WhenAll(requests.Select(request => { // Add headers request.Headers.Add("Umb-Webhook-Event", eventName); + request.Headers.Add("Umb-Webhook-Retry-Count", retryCount.ToString()); foreach (KeyValuePair header in webhook.Headers) { @@ -115,7 +116,7 @@ await Task.WhenAll(requests.Select(request => } catch (Exception ex) { - _logger.LogError(ex, "Error while sending webhook request for webhook {WebhookKey}.", webhook); + _logger.LogError(ex, "Error while sending webhook request for webhook {WebhookKey}.", webhook.Key); } var webhookResponseModel = new WebhookResponseModel From df68b0afc9e0155710cdbdd98b760529f03ff152 Mon Sep 17 00:00:00 2001 From: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com> Date: Wed, 6 Dec 2023 14:16:50 +0100 Subject: [PATCH 10/13] Update src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs Co-authored-by: Ronald Barendse --- .../DependencyInjection/UmbracoBuilderExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs b/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs index da530eba4295..7772d62a3bf0 100644 --- a/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs +++ b/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs @@ -265,7 +265,7 @@ private static IUmbracoBuilder AddHttpClients(this IUmbracoBuilder builder) builder.Services.AddHttpClient(Constants.HttpClients.WebhookFiring, (services, client) => { var productVersion = services.GetRequiredService().SemanticVersion.ToSemanticStringWithoutBuild(); - client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("Umbraco", productVersion)); + client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("Umbraco-CMS", productVersion)); }); return builder; } From 837ebf9e8334d9989bb3a5a75d62b3a3095ad31e Mon Sep 17 00:00:00 2001 From: Zeegaan Date: Wed, 6 Dec 2023 14:26:26 +0100 Subject: [PATCH 11/13] Create constant for User agent header name --- src/Umbraco.Core/Constants-HttpClients.cs | 8 ++++++++ .../Media/EmbedProviders/OEmbedProviderBase.cs | 2 +- .../DependencyInjection/UmbracoBuilderExtensions.cs | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Core/Constants-HttpClients.cs b/src/Umbraco.Core/Constants-HttpClients.cs index 9314671d80e5..a9c693f39d33 100644 --- a/src/Umbraco.Core/Constants-HttpClients.cs +++ b/src/Umbraco.Core/Constants-HttpClients.cs @@ -19,5 +19,13 @@ public static class HttpClients /// Name for http client which sends webhook requests. /// public const string WebhookFiring = "Umbraco:HttpClients:WebhookFiring"; + + public static class Headers + { + /// + /// User agent name for the product name. + /// + public const string UserAgentProductName = "Umbraco-Cms"; + } } } diff --git a/src/Umbraco.Core/Media/EmbedProviders/OEmbedProviderBase.cs b/src/Umbraco.Core/Media/EmbedProviders/OEmbedProviderBase.cs index 9385dcf6c941..59d0f171ef30 100644 --- a/src/Umbraco.Core/Media/EmbedProviders/OEmbedProviderBase.cs +++ b/src/Umbraco.Core/Media/EmbedProviders/OEmbedProviderBase.cs @@ -55,7 +55,7 @@ public virtual string DownloadResponse(string url) if (_httpClient == null) { _httpClient = new HttpClient(); - _httpClient.DefaultRequestHeaders.UserAgent.TryParseAdd("Umbraco-CMS"); + _httpClient.DefaultRequestHeaders.UserAgent.TryParseAdd(Constants.HttpClients.Headers.UserAgentProductName); } using (var request = new HttpRequestMessage(HttpMethod.Get, url)) diff --git a/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs b/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs index 7772d62a3bf0..8939b6fcb4f3 100644 --- a/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs +++ b/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs @@ -265,7 +265,7 @@ private static IUmbracoBuilder AddHttpClients(this IUmbracoBuilder builder) builder.Services.AddHttpClient(Constants.HttpClients.WebhookFiring, (services, client) => { var productVersion = services.GetRequiredService().SemanticVersion.ToSemanticStringWithoutBuild(); - client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("Umbraco-CMS", productVersion)); + client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(Constants.HttpClients.Headers.UserAgentProductName, productVersion)); }); return builder; } From eaaddc8feac029995dbfe0ad59037279295bf89b Mon Sep 17 00:00:00 2001 From: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com> Date: Thu, 7 Dec 2023 09:02:32 +0100 Subject: [PATCH 12/13] Update src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs Co-authored-by: Ronald Barendse --- src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs index 9ec1549606a0..062aa2936cbd 100644 --- a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs +++ b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs @@ -102,6 +102,7 @@ await Task.WhenAll(requests.Select(request => // Add headers request.Headers.Add("Umb-Webhook-Event", eventName); request.Headers.Add("Umb-Webhook-RetryCount", retryCount.ToString()); + request.Headers.Add("Umb-Webhook-Date", date.ToString("R")); foreach (KeyValuePair header in webhook.Headers) { From 21a418431717f815b07ac1d3e9da0c70f39f0fcf Mon Sep 17 00:00:00 2001 From: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com> Date: Thu, 7 Dec 2023 09:12:14 +0100 Subject: [PATCH 13/13] Use datetime.now --- src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs index 062aa2936cbd..3d16960144dd 100644 --- a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs +++ b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs @@ -102,7 +102,7 @@ await Task.WhenAll(requests.Select(request => // Add headers request.Headers.Add("Umb-Webhook-Event", eventName); request.Headers.Add("Umb-Webhook-RetryCount", retryCount.ToString()); - request.Headers.Add("Umb-Webhook-Date", date.ToString("R")); + request.Headers.Add("Umb-Webhook-Date", DateTime.Now.ToString("R")); foreach (KeyValuePair header in webhook.Headers) {