private void FillSampledTransactionContextRequest(HttpContext context, Transaction transaction)
        {
            if (context.Request == null)
            {
                return;
            }

            var url = new Url
            {
                Full     = context.Request.GetEncodedUrl(),
                HostName = context.Request.Host.Host,
                Protocol = GetProtocolName(context.Request.Protocol),
                Raw      = GetRawUrl(context.Request) ?? context.Request.GetEncodedUrl(),
                PathName = context.Request.Path,
                Search   = context.Request.QueryString.Value.Length > 0 ? context.Request.QueryString.Value.Substring(1) : string.Empty
            };

            Dictionary <string, string> requestHeaders = null;

            if (_configurationReader.CaptureHeaders)
            {
                requestHeaders = new Dictionary <string, string>();

                foreach (var header in context.Request.Headers)
                {
                    requestHeaders.Add(header.Key, header.Value.ToString());
                }
            }

            var body = Consts.BodyRedacted;             // According to the documentation - the default value of 'body' is '[Redacted]'

            if (!string.IsNullOrEmpty(context?.Request?.ContentType))
            {
                var contentType = new ContentType(context.Request.ContentType);
                if (_configurationReader.ShouldExtractRequestBodyOnTransactions() && _configurationReader.CaptureBodyContentTypes.ContainsLike(contentType.MediaType))
                {
                    body = context.Request.ExtractRequestBody(_logger);
                }
            }

            transaction.Context.Request = new Request(context.Request.Method, url)
            {
                Socket = new Socket
                {
                    Encrypted     = context.Request.IsHttps,
                    RemoteAddress = context.Connection?.RemoteIpAddress?.ToString()
                },
                HttpVersion = GetHttpVersion(context.Request.Protocol),
                Headers     = requestHeaders,
                Body        = (string.IsNullOrEmpty(body) ? Consts.BodyRedacted : body)
            };
        }
示例#2
0
        private string GetRequestBody(HttpRequest request)
        {
            // ReSharper disable once InvertIf
            if (_configurationReader.ShouldExtractRequestBodyOnTransactions() && !string.IsNullOrEmpty(request?.ContentType))
            {
                var contentType = new ContentType(request.ContentType);
                if (_configurationReader.CaptureBodyContentTypes.ContainsLike(contentType.MediaType))
                {
                    return(request.ExtractRequestBody(_logger) ?? Consts.BodyRedacted);
                }
            }

            // According to the documentation - the default value of 'body' is '[Redacted]'
            return(Consts.BodyRedacted);
        }