コード例 #1
0
        /// <summary>
        /// Extract the payload using the provided extractors.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>A serializable representation of the payload.</returns>
        public IMessage?ExtractPayload <TRequest>(IProtobufRequest <TRequest> request)
            where TRequest : class, IMessage
        {
            // Not to throw on code that ignores nullability warnings.
            // ReSharper disable once ConditionIsAlwaysTrueOrFalse
            if (request is null)
            {
                return(null);
            }

            var size = _sizeSwitch();

            switch (size)
            {
            case RequestSize.Small when request.ContentLength < 1_000:
            case RequestSize.Medium when request.ContentLength < 10_000:
            case RequestSize.Always:
                _options.DiagnosticLogger?.Log(SentryLevel.Debug,
                                               "Attempting to read request body of size: {0}, configured max: {1}.",
                                               null, request.ContentLength, size);

                foreach (var extractor in Extractors)
                {
                    var data = extractor.ExtractPayload(request);

                    if (data == null)
                    {
                        continue;
                    }

                    return(data);
                }

                break;

            // Request body extraction is opt-in
            case RequestSize.None:
                _options.DiagnosticLogger?.Log(SentryLevel.Debug, "Skipping request body extraction.");
                return(null);
            }

            _options.DiagnosticLogger?.Log(SentryLevel.Warning,
                                           "Ignoring request with Size {0} and configuration RequestSize {1}", null, request.ContentLength, size);

            return(null);
        }
 /// <summary>
 /// Extracts the request body of the <see cref="IProtobufRequest{TRequest}"/> as an <see cref="IMessage"/>.
 /// </summary>
 public IMessage ExtractPayload <TRequest>(IProtobufRequest <TRequest> request)
     where TRequest : class, IMessage
 {
     return(request.Request);
 }