diff --git a/src/Umbraco.Core/Services/WebhookLogFactory.cs b/src/Umbraco.Core/Services/WebhookLogFactory.cs index ec88bb52c4..fe1238cb0f 100644 --- a/src/Umbraco.Core/Services/WebhookLogFactory.cs +++ b/src/Umbraco.Core/Services/WebhookLogFactory.cs @@ -1,6 +1,6 @@ using System.Net; +using System.Text; using Umbraco.Cms.Core.Models; -using Umbraco.Cms.Core.Webhooks; namespace Umbraco.Cms.Core.Services; @@ -15,20 +15,38 @@ public class WebhookLogFactory : IWebhookLogFactory Key = Guid.NewGuid(), Url = webhook.Url, WebhookKey = webhook.Key, + RetryCount = responseModel.RetryCount, }; if (responseModel.HttpResponseMessage is not null) { - log.RequestBody = await responseModel.HttpResponseMessage!.RequestMessage!.Content!.ReadAsStringAsync(cancellationToken); + if (responseModel.HttpResponseMessage.RequestMessage?.Content is not null) + { + log.RequestBody = await responseModel.HttpResponseMessage.RequestMessage.Content.ReadAsStringAsync(cancellationToken); + log.RequestHeaders = CalculateHeaders(responseModel.HttpResponseMessage); + } + log.ResponseBody = await responseModel.HttpResponseMessage.Content.ReadAsStringAsync(cancellationToken); - log.StatusCode = MapStatusCodeToMessage(responseModel.HttpResponseMessage.StatusCode); - log.RetryCount = responseModel.RetryCount; log.ResponseHeaders = responseModel.HttpResponseMessage.Headers.ToString(); - log.RequestHeaders = responseModel.HttpResponseMessage.RequestMessage.Headers.ToString(); + log.StatusCode = MapStatusCodeToMessage(responseModel.HttpResponseMessage.StatusCode); } return log; } private string MapStatusCodeToMessage(HttpStatusCode statusCode) => $"{statusCode.ToString()} ({(int)statusCode})"; + + private string CalculateHeaders(HttpResponseMessage responseMessage) + { + IEnumerable>> headers = responseMessage.RequestMessage!.Headers.Concat(responseMessage.RequestMessage.Content!.Headers); + + var result = new StringBuilder(); + + foreach (KeyValuePair> header in headers) + { + result.AppendLine($"{header.Key}: {string.Join(", ", header.Value)}\n"); + } + + return result.ToString(); + } }