I use below code to get the outgoing request/response from telemetry initializer in my Asp.Net Core service:
public void Initialize(ITelemetry telemetry)
{
if (telemetry is DependencyTelemetry)
{
var dependencyTelemetry = telemetry as DependencyTelemetry;
if (dependencyTelemetry.TryGetOperationDetail("HttpRequest", out var request))
{
var httpRequest = request as HttpRequestMessage;
}
if (dependencyTelemetry.TryGetOperationDetail("HttpResponse", out var response))
{
var httpResponse = response as HttpResponseMessage;
}
}
}
I can get request successfully with above code, but the response from TryGetOperationDetail is always null. Anything wrong in my code?
CodePudding user response:
For me, This code recorded all the headers sent to dependency and also response have been tracked.
public void Initialize(ITelemetry telemetry)
{
var dependecyTelemetry = telemetry as DependencyTelemetry;
if (dependecyTelemetry == null) return;
if (dependecyTelemetry.TryGetOperationDetail("HttpRequest", out object request)
&& request is HttpRequestMessage httpRequest)
{
foreach (var item in httpRequest.Headers)
{
if (!dependecyTelemetry.Properties.ContainsKey(item.Key))
dependecyTelemetry.Properties.Add(item.Key, string.Join(Environment.NewLine, item.Value));
}
}
if (dependecyTelemetry.TryGetOperationDetail("HttpResponse", out object response)
&& response is HttpResponseMessage httpResponse)
{
var responseBody = httpResponse.Content.ReadAsStringAsync().GetAwaiter().GetResult();
if (!string.IsNullOrEmpty(responseBody))
dependecyTelemetry.Properties.Add("ResponseBody", responseBody);
}
}
For further reference on telemetry refer this site
