I want trace the response body of my httpclient requests in dependencies table Application Insight. My application runs with .NET framework 4.8 I created an Initializer to trace the Dependencies telemetry with the following code:
public class TrackResponseBody : ITelemetryInitializer
{
public void Initialize(ITelemetry telemetry)
{
var requestTelemetry = telemetry as DependencyTelemetry;
if (requestTelemetry == null)
return;
if (requestTelemetry.TryGetOperationDetail("HttpResponse", out var responseObj))
{
var response = responseObj as HttpWebResponse;
if (response != null)
{
using (var stream = response.GetResponseStream())
{
var reader = new StreamReader(stream);
string result = reader.ReadToEnd();
requestTelemetry.Properties["ResponseBody"] = result;
}
}
}
}
}
But when i try to call reader.ReadToEnd()
, my code generate this exception: System.NotSupportedException: 'The stream does not support concurrent IO read or write operations.'
This code write correctly in application insight dependencies log, if i don't try to get body response.
This is how I implemented my HttpClient
:
var client_ = new HttpClient();
client_.BaseAddress = new Uri("https://www.google.com");
using (var request_ = new HttpRequestMessage())
{
request_.Method = new HttpMethod("GET");
var response_ = await client_.SendAsync(request_).ConfigureAwait(false);
var responseData_ = await response_.Content.ReadAsStringAsync().ConfigureAwait(false);
}
Is there a way to get the body response of my HttpClient?