View POST request body in Application Insights

前端 未结 9 1581
抹茶落季
抹茶落季 2020-11-29 17:48

Is it possible to view POST request body in Application Insights?

I can see request details, but not the payload being posted in application insights. Do I have to t

9条回答
  •  半阙折子戏
    2020-11-29 18:11

    I never got @yonisha's answer working so I used a DelegatingHandler instead:

    public class MessageTracingHandler : DelegatingHandler
    {
        protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            // Trace the request
            await TraceRequest(request);
    
            // Execute the request
            var response = await base.SendAsync(request, cancellationToken);
    
            // Trace the response
            await TraceResponse(response);
    
            return response;
        }
    
        private async Task TraceRequest(HttpRequestMessage request)
        {
            try
            {
                var requestTelemetry = HttpContext.Current?.GetRequestTelemetry();
    
                var requestTraceInfo = request.Content != null ? await request.Content.ReadAsByteArrayAsync() : null;
    
                var body = requestTraceInfo.ToString();
    
                if (!string.IsNullOrWhiteSpace(body) && requestTelemetry != null)
                {
                    requestTelemetry.Properties.Add("Request Body", body);
                }
            }
            catch (Exception exception)
            {
                // Log exception
            }
        }
    
        private async Task TraceResponse(HttpResponseMessage response)
        {
            try
            {
                var requestTelemetry = HttpContext.Current?.GetRequestTelemetry();
    
                var responseTraceInfo = response.Content != null ? await response.Content.ReadAsByteArrayAsync() : null;
    
                var body = responseTraceInfo.ToString();
    
                if (!string.IsNullOrWhiteSpace(body) && requestTelemetry != null)
                {
                    requestTelemetry.Properties.Add("Response Body", body); 
                }
            }
            catch (Exception exception)
            {
                // Log exception
            }
        }
    }
    

    .GetRequestTelemetry() is an extension method from Microsoft.ApplicationInsights.Web.

提交回复
热议问题