示例#1
0
        static public async Task <Response> Send_OTHERS(this Request request, Action <long[]> onProgress = null)
        {
            Response response = null;

            try
            {
#if NET45
                var req = (HttpWebRequest)WebRequest.Create(request.Uri);
#else
                var req = new HttpWebRequest(request.Uri);
#endif

                req.Method = request.Method;
                req.AddHeaders(request.Headers);
                if (request.Content != null && request.Content.Length > 0)
                {
                    var reqStream = Task.Factory.FromAsync <Stream>(req.BeginGetRequestStream, req.EndGetRequestStream, null).Result;
                    request.Content.CopyTo(reqStream);
                    reqStream.Flush();
                }

                //var res = (HttpWebResponse) await Task.Factory.FromAsync<WebResponse>(req.BeginGetResponse, req.EndGetResponse, null);
                // weird problems with some datasoures, replace the above line for the following; this should not block UI cause the public interfaces
                // are async
                var wr  = Task.Factory.FromAsync <WebResponse>(req.BeginGetResponse, req.EndGetResponse, null).Result;
                var res = (HttpWebResponse)wr;

                var resStream = default(Stream);
                if (res.ContentLength > 0)
                {
                    resStream = res.GetResponseStream();
                }

                response = await Response.Create(res.StatusCode, resStream);

                foreach (var name in res.Headers.AllKeys)
                {
                    response.Headers.Add(name, res.Headers[name]);
                }
                return(response);
            }
            catch (Exception e)
            {
                throw e;
            }
        }