Код: Выделить всё
builder.Services
.AddHttpClient()
.ConfigurePrimaryHttpMessageHandler(() => ConfigureMessageHandler(env));
HttpMessageHandler ConfigureMessageHandler(IHostEnvironment hostEnv)
{
var handler = new SocketsHttpHandler
{
PooledConnectionLifetime = TimeSpan.FromMinutes(5),
};
return handler;
}
При реализации моего клиента я пытаюсь зарегистрировать запрос со всеми его заголовками, но не вижу файла cookie, добавленного 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 GetRequestHeaders(HttpRequestMessage requestMessage)
{
var headers = new Dictionary(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;
}
Почему SocketsHttpHandler не обновляет объект responseMessage при изменении запроса?
Есть ли способ регистрировать (мы используем Serilog) результирующие заголовки запроса?>
Подробнее здесь: https://stackoverflow.com/questions/798 ... shttphandl
Мобильная версия