Ejemplo n.º 1
0
        public void ContentLength_SetCustomValue_TryComputeLengthNotInvoked()
        {
            _headers = new HttpContentHeaders(new ComputeLengthHttpContent(() => { throw new ShouldNotBeInvokedException(); }));

            _headers.ContentLength = 27;
            Assert.Equal((long)27, _headers.ContentLength);
            Assert.Equal((long)27, _headers.GetParsedValues(HttpKnownHeaderNames.ContentLength));

            // After explicitly setting the content length, set it to null.
            _headers.ContentLength = null;
            Assert.Equal(null, _headers.ContentLength);
            Assert.False(_headers.Contains(HttpKnownHeaderNames.ContentLength));

            // Make sure the header gets serialized correctly
            _headers.ContentLength = 12345;
            Assert.Equal("12345", _headers.GetValues("Content-Length").First());
        }
Ejemplo n.º 2
0
        public void ContentLength_SetCustomValue_DelegateNotInvoked()
        {
            _headers = new HttpContentHeaders(() => { Assert.True(false, "Delegate called."); return 0; });

            _headers.ContentLength = 27;
            Assert.Equal((long)27, _headers.ContentLength);
            Assert.Equal((long)27, _headers.GetParsedValues(HttpKnownHeaderNames.ContentLength));

            // After explicitly setting the content length, set it to null.
            _headers.ContentLength = null;
            Assert.Equal(null, _headers.ContentLength);
            Assert.False(_headers.Contains(HttpKnownHeaderNames.ContentLength));

            // Make sure the header gets serialized correctly
            _headers.ContentLength = 12345;
            Assert.Equal("12345", _headers.GetValues("Content-Length").First());
        }
        /// <summary>Copies all headers from the source to the target.</summary>
        /// <param name="source">The source.</param>
        /// <param name="target">The target.</param>
        /// <param name="handleContentLength">true to handle content length.</param>
        /// <param name="handleContentEncoding">true to handle content encoding.</param>
        /// <param name="handleChangedValues">true to handle changed values.</param>
        public static void CopyTo(
            this HttpContentHeaders source,
            HttpContentHeaders target,
            bool handleContentLength = true,
            bool handleContentEncoding = true,
            bool handleChangedValues = false)
        {
            // Remove headers we are going to rewrite and headers with null values
            foreach (var header in source)
            {
                try
                {
                    if (!handleContentLength && header.Key.Equals("Content-Length", StringComparison.OrdinalIgnoreCase))
                    {
                        return;
                    }

                    if (!handleContentEncoding && header.Key.Equals("Content-Encoding", StringComparison.OrdinalIgnoreCase))
                    {
                        return;
                    }

                    if (!handleChangedValues)
                    {
                        // If values have changed, dont update it
                        if (target.Contains(header.Key))
                        {
                            if (target.GetValues(header.Key).Any(targetValue => header.Value.Any(originalValue => originalValue != targetValue)))
                            {
                                return;
                            }
                        }
                    }

                    target.Add(header.Key, header.Value);
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex);
                }
            }
        }