private object ReadResponse(WebRequest client, bool binaryResponse) { var webResponse = (HttpWebResponse)this.GetResponse(client); var resultStream = new MemoryStream(); StreamHelper.CopyTo(webResponse.GetResponseStream(), resultStream); try { this.requestHandlers.ForEach(p => p.ProcessResponse(webResponse, resultStream)); resultStream.Position = 0; if (binaryResponse) { return(resultStream); } using (var responseReader = new StreamReader(resultStream)) { var responseData = responseReader.ReadToEnd(); resultStream.Dispose(); return(responseData); } } catch (Exception) { resultStream.Dispose(); throw; } }
private async Task <object> ReadResponseAsync(WebRequest client, bool binaryResponse) { var webResponse = (HttpWebResponse)await this.GetResponseAsync(client); var resultStream = new MemoryStream(); StreamHelper.CopyTo(webResponse.GetResponseStream(), resultStream); try { foreach (var requestHandler in this.requestHandlers) { await requestHandler.ProcessResponseAsync(webResponse, resultStream); } resultStream.Position = 0; if (binaryResponse) { return(resultStream); } using (var responseReader = new StreamReader(resultStream)) { var responseData = responseReader.ReadToEnd(); resultStream.Dispose(); return(responseData); } } catch (Exception) { resultStream.Dispose(); throw; } }
private WebRequest PrepareRequest(string path, string method, Dictionary <string, object> formParams, Dictionary <string, string> headerParams, string body, string contentType) { var client = WebRequest.Create(path); client.Method = method; byte[] formData = null; if (formParams.Count > 0) { if (formParams.Count > 1) { string formDataBoundary = "Somthing"; client.ContentType = "multipart/form-data; boundary=" + formDataBoundary; formData = GetMultipartFormData(formParams, formDataBoundary); } else { client.ContentType = "multipart/form-data"; formData = GetMultipartFormData(formParams, string.Empty); } client.ContentLength = formData.Length; } else { client.ContentType = contentType; } foreach (var headerParamsItem in headerParams) { client.Headers.Add(headerParamsItem.Key, headerParamsItem.Value); } foreach (var defaultHeaderMapItem in this.defaultHeaderMap) { if (!headerParams.ContainsKey(defaultHeaderMapItem.Key)) { client.Headers.Add(defaultHeaderMapItem.Key, defaultHeaderMapItem.Value); } } MemoryStream streamToSend = null; try { switch (method) { case "GET": break; case "POST": case "PUT": case "DELETE": streamToSend = new MemoryStream(); if (formData != null) { streamToSend.Write(formData, 0, formData.Length); } if (body != null) { var requestWriter = new StreamWriter(streamToSend); requestWriter.Write(body); requestWriter.Flush(); } break; default: throw new ApiException("unknown method type " + method, StatusCodes.InternalError); } this.requestHandlers.ForEach(p => p.BeforeSend(client, streamToSend)); if (streamToSend != null) { using (Stream requestStream = client.GetRequestStream()) { StreamHelper.CopyTo(streamToSend, requestStream); } } } finally { if (streamToSend != null) { streamToSend.Dispose(); } } return(client); }