Exemple #1
0
        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);
        }