ARTICLE AD BOX
I have a typed HttpClient, added to DI like this:
builder.Services .AddHttpClient<IExternalApiClient, ExternalApiClient>() .ConfigurePrimaryHttpMessageHandler(() => ConfigureMessageHandler(env)); HttpMessageHandler ConfigureMessageHandler(IHostEnvironment hostEnv) { var handler = new SocketsHttpHandler { PooledConnectionLifetime = TimeSpan.FromMinutes(5), }; return handler; }By default SocketsHttpHandler.UseCookies = true. It means that the handler can add a cookie to my request.
In the implementation of my client, I try to log the request with all its headers, but I don't see the cookie added by the SocketsHttpHandler.
HttpRequestMessage requestMessage = new(); requestMessage.RequestUri = new(@"http://localhost:5044/WeatherForecast/EnumerateCookie"); requestMessage.Headers.Add("cookie", "MY_COOKIE=A"); requestMessage.Method = HttpMethod.Get; using HttpResponseMessage response = await _httpClient.SendAsync(requestMessage); var fullRequestHeaderList = HttpLogHelper.GetRequestHeaders(requestMessage); public static Dictionary<string, object> GetRequestHeaders(HttpRequestMessage requestMessage) { var headers = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase); foreach (var header in requestMessage.Headers) { var values = header.Value?.ToArray() ?? []; headers[header.Key] = values.Length == 1 ? values[0] : values; } if (requestMessage.Content == null) { return headers; } foreach (var header in requestMessage.Content.Headers) { var values = header.Value?.ToArray() ?? []; if (headers.TryGetValue(header.Key, out var existing)) { var existingArray = existing is string s ? [s] : (string[])existing; var merged = existingArray.Concat(values).ToArray(); headers[header.Key] = merged.Length == 1 ? merged[0] : merged; } else { headers[header.Key] = values.Length == 1 ? values[0] : values; } } return headers; }Also, the requestMessage and responseMessage.requestMessage is the same object.
Why does the SocketsHttpHandler not update the responseMessage object when it modifies a request?
Is there a way to log (we use Serilog) resulting request headers?
