public override Stream GetRequestStream() { if (RequestSubmitted) { throw new InvalidOperationException("This operation cannot be performed after the request has been submitted."); } if (_requestContentBuffer == null) { if (ContentLength == 0) { _requestContentStream = new NeverEndingStream(); return(_requestContentStream); } _requestContentBuffer = new byte[ContentLength]; } else if (ContentLength == default(long)) { _requestContentBuffer = new byte[int.MaxValue]; } else if (_requestContentBuffer.Length != ContentLength) { Array.Resize(ref _requestContentBuffer, (int)ContentLength); } return(new MemoryStream(_requestContentBuffer)); }
private string BuildHttpRequestMessage(Uri requestUri) { if (RequestSubmitted) { throw new InvalidOperationException("This operation cannot be performed after the request has been submitted."); } // See if we have a stream instead of byte array if (_requestContentBuffer == null && _requestContentStream != null) { _requestContentBuffer = _requestContentStream.ToArray(); _requestContentStream.ForceClose(); _requestContentStream.Dispose(); _requestContentStream = null; ContentLength = _requestContentBuffer.Length; } var message = new StringBuilder(); message.AppendFormat("{0} {1} HTTP/1.1\r\nHost: {2}\r\n", Method, requestUri, requestUri.Host); Headers.Set(HttpRequestHeader.Connection, "close"); // add the headers foreach (var key in Headers.Keys) { string value = Headers[key.ToString()]; if (!string.IsNullOrEmpty(value)) { message.AppendFormat("{0}: {1}\r\n", key, value); } } if (!string.IsNullOrEmpty(ContentType)) { message.AppendFormat("Content-Type: {0}\r\n", ContentType); } if (ContentLength > 0) { message.AppendFormat("Content-Length: {0}\r\n", ContentLength); } // add a blank line to indicate the end of the headers message.Append("\r\n"); // add content if (_requestContentBuffer != null && _requestContentBuffer.Length > 0) { using (var stream = new MemoryStream(_requestContentBuffer, false)) { using (var reader = new StreamReader(stream)) { message.Append(reader.ReadToEnd()); } } } else if (_requestContentStream != null) { _requestContentStream.Position = 0; using (var reader = new StreamReader(_requestContentStream)) { message.Append(reader.ReadToEnd()); } _requestContentStream.ForceClose(); _requestContentStream.Dispose(); } return(message.ToString()); }