using System.Diagnostics.CodeAnalysis; using System.Text.Json; namespace Bit.SeederApi.IntegrationTest; public static class HttpClientExtensions { /// /// Sends a POST request with JSON content and attaches the x-play-id header. /// /// The type of the value to serialize. /// The HTTP client. /// The URI the request is sent to. /// The value to serialize. /// The play ID to attach as x-play-id header. /// Options to control the behavior during serialization. /// A cancellation token that can be used to cancel the operation. /// The task object representing the asynchronous operation. public static Task PostAsJsonAsync( this HttpClient client, [StringSyntax(StringSyntaxAttribute.Uri)] string? requestUri, TValue value, string playId, JsonSerializerOptions? options = null, CancellationToken cancellationToken = default) { ArgumentNullException.ThrowIfNull(client); if (string.IsNullOrWhiteSpace(playId)) { throw new ArgumentException("Play ID cannot be null or whitespace.", nameof(playId)); } var content = JsonContent.Create(value, mediaType: null, options); content.Headers.Remove("x-play-id"); content.Headers.Add("x-play-id", playId); return client.PostAsync(requestUri, content, cancellationToken); } }