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()); }
public void ContentLength_ReadValue_TryComputeLengthInvoked() { _headers = new HttpContentHeaders(new ComputeLengthHttpContent(() => 15)); // The delegate is invoked to return the length. Assert.Equal(15, _headers.ContentLength); Assert.Equal((long)15, _headers.GetParsedValues(HttpKnownHeaderNames.ContentLength)); // After getting the calculated content length, set it to null. _headers.ContentLength = null; Assert.Equal(null, _headers.ContentLength); Assert.False(_headers.Contains(HttpKnownHeaderNames.ContentLength)); _headers.ContentLength = 27; Assert.Equal((long)27, _headers.ContentLength); Assert.Equal((long)27, _headers.GetParsedValues(HttpKnownHeaderNames.ContentLength)); }
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); } } }