public async Task <HttpResponseMessage> PushDeployFromFile(string path, ZipDeployMetadata metadata)
 {
     using (var stream = File.OpenRead(path))
     {
         return(await PushDeployFromStream(stream, metadata));
     }
 }
        public async Task <HttpResponseMessage> PushDeployFromStream(Stream zipFile, ZipDeployMetadata metadata, IList <KeyValuePair <string, string> > queryParams = null)
        {
            using (var request = new HttpRequestMessage())
            {
                var parms = new List <string>();

                if (metadata.IsAsync)
                {
                    parms.Add("isAsync=true");
                }

                if (metadata.TrackDeploymentProgress)
                {
                    parms.Add("trackDeploymentProgress=true");
                }

                var map = new List <KeyValuePair <string, string> >
                {
                    new KeyValuePair <string, string>("author", metadata.Author),
                    new KeyValuePair <string, string>("authorEmail", metadata.AuthorEmail),
                    new KeyValuePair <string, string>("deployer", metadata.Deployer),
                    new KeyValuePair <string, string>("message", metadata.Message),
                };

                if (queryParams != null)
                {
                    map.AddRange(queryParams);
                }

                foreach (var item in map)
                {
                    if (item.Value != null)
                    {
                        parms.Add(
                            String.Format("{0}={1}", item.Key, item.Value));
                    }
                }

                if (parms.Any())
                {
                    request.RequestUri = new Uri(Client.BaseAddress + "?" + String.Join("&", parms));
                }

                request.Method  = HttpMethod.Post;
                request.Content = new StreamContent(zipFile);
                return(await Client.SendAsync(request));
            }
        }