System.Net.Http.WinHttpHandler.WinHttpHandler.IsChunkedModeForSend C# (CSharp) Method

IsChunkedModeForSend() private static method

private static IsChunkedModeForSend ( HttpRequestMessage requestMessage ) : bool
requestMessage HttpRequestMessage
return bool
        private static bool IsChunkedModeForSend(HttpRequestMessage requestMessage)
        {
            bool chunkedMode = requestMessage.Headers.TransferEncodingChunked.HasValue &&
                requestMessage.Headers.TransferEncodingChunked.Value;

            HttpContent requestContent = requestMessage.Content;
            if (requestContent != null)
            {
                if (requestContent.Headers.ContentLength.HasValue)
                {
                    if (chunkedMode)
                    {
                        // Deal with conflict between 'Content-Length' vs. 'Transfer-Encoding: chunked' semantics.
                        // Current .NET Desktop HttpClientHandler allows both headers to be specified but ends up
                        // stripping out 'Content-Length' and using chunked semantics.  WinHttpHandler will maintain
                        // the same behavior.
                        requestContent.Headers.ContentLength = null;
                    }
                }
                else
                {
                    if (!chunkedMode)
                    {
                        // Neither 'Content-Length' nor 'Transfer-Encoding: chunked' semantics was given.
                        // Current .NET Desktop HttpClientHandler uses 'Content-Length' semantics and
                        // buffers the content as well in some cases.  But the WinHttpHandler can't access
                        // the protected internal TryComputeLength() method of the content.  So, it
                        // will use'Transfer-Encoding: chunked' semantics.
                        chunkedMode = true;
                        requestMessage.Headers.TransferEncodingChunked = true;
                    }
                }
            }
            else if (chunkedMode)
            {
                throw new InvalidOperationException(SR.net_http_chunked_not_allowed_with_empty_content);
            }

            return chunkedMode;
        }