Implement System.Net.Http content upload
authorMarek Safar <marek.safar@gmail.com>
Tue, 1 May 2012 10:00:39 +0000 (11:00 +0100)
committerMarek Safar <marek.safar@gmail.com>
Tue, 1 May 2012 10:00:39 +0000 (11:00 +0100)
mcs/class/System.Net.Http/System.Net.Http/HttpClientHandler.cs
mcs/class/System/System.Net/WebHeaderCollection.cs

index 6ba92066f167819fbce1c252b9db6c79d15ad4ea..718af53401725eced2ea626ccf2752692cd247e3 100644 (file)
@@ -241,11 +241,10 @@ namespace System.Net.Http
                        var headers = wr.Headers;
                        foreach (var header in request.Headers) {
                                foreach (var value in header.Value) {
-                                       // TODO: Have to call simpler Add
-                                       headers.Add (header.Key, value);
+                                       headers.AddValue (header.Key, value);
                                }
                        }
-
+                       
                        return wr;
                }
 
@@ -275,12 +274,18 @@ namespace System.Net.Http
                        var wrequest = CreateWebRequest (request);
 
                        if (request.Content != null) {
-                               throw new NotImplementedException ();
-                               //var stream = await wrequest.GetRequestStreamAsync ();
-                               //await request.Content.CopyToAsync (stream);
+                               var headers = wrequest.Headers;
+                               foreach (var header in request.Content.Headers) {
+                                       foreach (var value in header.Value) {
+                                               headers.AddValue (header.Key, value);
+                                       }
+                               }
+                               
+                               var stream = wrequest.GetRequestStream ();
+                               await request.Content.CopyToAsync (stream);
                        }
 
-                       // FIXME: Why GetResponseAsync does not accept cancellationToken
+                       // FIXME: GetResponseAsync does not accept cancellationToken
                        var wresponse = (HttpWebResponse) await wrequest.GetResponseAsync ().ConfigureAwait (false);
                        return CreateResponseMessage (wresponse, request);
                }
index c9b7ee2b03da1a363ce89a5706974f77c9f4f7b4..d136d830d1290afce0789d856bd9db2bab597c25 100644 (file)
@@ -181,6 +181,12 @@ namespace System.Net
                                headerValue = headerValue.Trim ();
                        if (!IsHeaderValue (headerValue))
                                throw new ArgumentException ("invalid header value: " + headerValue, "headerValue");
+                       
+                       AddValue (headerName, headerValue);
+               }
+                       
+               internal void AddValue (string headerName, string headerValue)
+               {
                        base.Add (headerName, headerValue);                     
                }