public PostWebServiceResponse PostAsyncWithMultipleAttachments <T>(T item, List <string> fileNames, List <byte[]> buffers) { PostWebServiceResponse response = new PostWebServiceResponse(); try { // HttpClient client = new HttpClient(); //Defining the unique boundary string boundary = "----WebKitFormBoundary" + DateTime.Now.Ticks.ToString("x"); HttpWebRequest req = (HttpWebRequest)WebRequest.Create(RequestUrl); req.AllowAutoRedirect = false; if (Headers.Count > 0) { BuildHeaders(req); } req.Method = MethodType;//Post req.ContentType = "multipart/form-data; boundary=" + boundary; Stream stream = req.GetRequestStream(); //Body need to be extended for each part of the request // Add header for JSON part // Body += "Content-Disposition: form-data; name='entity'\r\n";//entity is relative to the object we r sending //Body += "Content-Type: application/json\r\n\r\n";//defining the content type for this part of request // Add document object data in JSON //Body += JsonConvert.SerializeObject(item); Body += "\r\n--" + boundary + "\r\n"; // Body += "Content-Disposition: form-data; name='record'\r\n"; // Body += "Content-Type: application/json\r\n\r\n"; var settings = new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Include, DateTimeZoneHandling = DateTimeZoneHandling.Utc, DateFormatString = "yyyy/MM/dd" }; Body += string.Format("Content-Disposition: form-data; name=\"{0}\"\r\n\r\n", "record"); string jsonString = JsonConvert.SerializeObject(item, settings); Body += jsonString; //Finalized the json part byte[] data = System.Text.Encoding.UTF8.GetBytes(Body); stream.Write(data, 0, data.Length); string additionalFile = ""; byte[] additionalFileData = null; for (int i = 0; i < buffers.Count; i++) { additionalFile = ""; additionalFile += "\r\n--" + boundary + "\r\n"; additionalFile += "Content-Disposition: form-data; name=\"picture" + i.ToString() + "\"; filename=\"" + fileNames[i] + "\"\r\n"; additionalFile += "Content-Type: application/octet-stream\r\n\r\n"; additionalFileData = System.Text.Encoding.UTF8.GetBytes(additionalFile); stream.Write(additionalFileData, 0, additionalFileData.Length); stream.Write(buffers[i], 0, buffers[i].Length); } //Now we need to write the headers to the request // Add header data to request // Add binary file to request // Finalizing by adding the footer of the request or what we call trailer byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); stream.Write(trailer, 0, trailer.Length); stream.Close(); HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); // *** [2] *** stream = resp.GetResponseStream(); // resp.Close(); // Do the post and get the response. //var r = req.GetResponse(); //Stream s = r.GetResponseStream(); StreamReader reader = new StreamReader(stream, true); string x = reader.ReadToEnd(); if (Resolver != null) { settings.ContractResolver = Resolver; } response = JsonConvert.DeserializeObject <PostWebServiceResponse>(x, settings); return(response); } catch (Exception ex) { string exception = BuildLogMessage() + " : " + ex.Message; LoggingFactory.GetLogger().Log(exception); response.statusId = "0"; return(response); } }
//public PostWebServiceResponse PostAsync<T>(T item) //{ // PostWebServiceResponse response = new PostWebServiceResponse(); // try // { // WebRequest req = HttpWebRequest.Create(RequestUrl); // req.Method = MethodType; // if (Headers.Count > 0) // BuildHeaders(req); // Body = JsonConvert.SerializeObject(item); // Stream stream = req.GetRequestStream(); // StreamWriter wr = new StreamWriter(stream); // wr.Write(Body); // wr.Flush(); // wr.Close(); // stream.Close(); // //req.ContentLength = stream.Length; // var r = req.GetResponse(); // Stream s = r.GetResponseStream(); // StreamReader reader = new StreamReader(s, true); // string x = reader.ReadToEnd(); // var settings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; // if (Resolver != null) // { // settings.ContractResolver = Resolver; // } // settings.DateTimeZoneHandling = DateTimeZoneHandling.Utc; // response = JsonConvert.DeserializeObject<PostWebServiceResponse>(x, settings); // return response; // } // catch (Exception ex) // { // string exception = BuildLogMessage() + " : " + ex.Message; // LoggingFactory.GetLogger().Log(exception); // response.statusId = "0"; // return response; // } //} public PostWebServiceResponse PostAsyncFormData <T>(T item) { PostWebServiceResponse response = new PostWebServiceResponse(); try { // HttpClient client = new HttpClient(); //Defining the unique boundary string boundary = "----WebKitFormBoundary" + DateTime.Now.Ticks.ToString("x"); HttpWebRequest req = (HttpWebRequest)WebRequest.Create(RequestUrl); req.AllowAutoRedirect = false; if (Headers.Count > 0) { BuildHeaders(req); } req.Method = MethodType;//Post req.ContentType = "multipart/form-data; boundary=" + boundary; Stream stream = req.GetRequestStream(); //Body need to be extended for each part of the request // Add header for JSON part // Body += "Content-Disposition: form-data; name='entity'\r\n";//entity is relative to the object we r sending //Body += "Content-Type: application/json\r\n\r\n";//defining the content type for this part of request // Add document object data in JSON //Body += JsonConvert.SerializeObject(item); Body += "\r\n--" + boundary + "\r\n";; Body += string.Format("Content-Disposition: form-data; name=\"{0}\"\r\n\r\n", "record"); var serSettings = new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore, DateTimeZoneHandling = DateTimeZoneHandling.Utc }; string jsonString = JsonConvert.SerializeObject(item, serSettings); Body += jsonString; Body += "\r\n--" + boundary + "\r\n";; //Now we need to add the header for the binary part inside the body byte[] data = System.Text.Encoding.UTF8.GetBytes(Body); stream.Write(data, 0, data.Length); // Add binary file to request // Finalizing by adding the footer of the request or what we call trailr byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); stream.Write(trailer, 0, trailer.Length); stream.Close(); // Do the post and get the response. var r = req.GetResponse(); Stream s = r.GetResponseStream(); StreamReader reader = new StreamReader(s, true); string x = reader.ReadToEnd(); var settings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, DateTimeZoneHandling = DateTimeZoneHandling.Utc }; if (Resolver != null) { settings.ContractResolver = Resolver; } settings.DateTimeZoneHandling = DateTimeZoneHandling.Utc; response = JsonConvert.DeserializeObject <PostWebServiceResponse>(x, settings); return(response); } catch (Exception ex) { string exception = BuildLogMessage() + " : " + ex.Message; LoggingFactory.GetLogger().Log(exception); response.statusId = "0"; response.description = ex.Message; return(response); } }