private Stream Call( string path, string method, Dictionary <string, string> headerParams, List <FileInfo> files, B body, string contentType) { WebRequest client = WebRequest.Create(path); foreach (var headerParamsItem in headerParams) { client.Headers[headerParamsItem.Key] = headerParamsItem.Value; } foreach (var defaultHeaderMapItem in m_defaultHeaderMap) { if (!headerParams.ContainsKey(defaultHeaderMapItem.Key)) { client.Headers[defaultHeaderMapItem.Key] = defaultHeaderMapItem.Value; } } client.Method = method; switch (method) { case "GET": m_requestHandlers.ForEach(p => p.BeforeSend(client, null)); break; case "POST": case "PUT": case "DELETE": using (MemoryStream inputData = new MemoryStream()) { WriteBodyAndFiles(inputData, body, files, ref contentType); client.ContentType = contentType; m_requestHandlers.ForEach(p => p.BeforeSend(client, inputData)); inputData.Position = 0; #if NETFRAMEWORK using (Stream requestStream = client.GetRequestStream()) #else using (Stream requestStream = client.GetRequestStreamAsync().Result) #endif { StreamHelper.CopyTo(inputData, requestStream); } } break; default: throw new ApiException(500, "unknown method type " + method); } HttpWebResponse webResponse = (HttpWebResponse)GetResponse(client); MemoryStream resultStream = new MemoryStream(); StreamHelper.CopyTo(webResponse.GetResponseStream(), resultStream); m_requestHandlers.ForEach(p => p.ProcessResponse(webResponse, resultStream)); resultStream.Position = 0; return(resultStream); }