internal static Task PostStringAsync()

in Source/Internal/ServiceHelper.cs [166:247]


        internal static Task<Stream> PostStringAsync(Uri url, string data, string contentType)
        {
            var tcs = new TaskCompletionSource<Stream>();

            var request = HttpWebRequest.Create(url);

            if (ServiceManager.Proxy != null)
            {
                request.Proxy = ServiceManager.Proxy;
            }

            request.Method = "POST";

            if (!string.IsNullOrWhiteSpace(contentType))
            {
                request.ContentType = contentType;
            }
            else
            {
                request.ContentType = "text/plain;charset=utf-8";
            }

            request.BeginGetRequestStream((a) =>
            {
                try
                {
                    var r = (HttpWebRequest)a.AsyncState;

                    //Add data to request stream
                    using (var requestStream = r.EndGetRequestStream(a))
                    {
                        byte[] bytes = System.Text.Encoding.UTF8.GetBytes(data);
                        requestStream.Write(bytes, 0, bytes.Length);
                    }

                    request.BeginGetResponse((a2) =>
                    {
                        try
                        {
                            var r2 = (HttpWebRequest)a2.AsyncState;

                            using (var response = (HttpWebResponse)r2.EndGetResponse(a2))
                            {
                                tcs.SetResult(CopyToMemoryStream(response.GetResponseStream()));
                            }
                        }
                        catch (WebException ex)
                        {
                            if (ex.Response != null)
                            {
                                tcs.SetResult(CopyToMemoryStream(ex.Response.GetResponseStream()));
                            }
                            else
                            {
                                tcs.SetException(ex);
                            }
                        }
                        catch (Exception ex)
                        {
                            tcs.SetException(ex);
                        }
                    }, request);
                }
                catch (WebException ex)
                {
                    if (ex.Response != null)
                    {
                        tcs.SetResult(CopyToMemoryStream(ex.Response.GetResponseStream()));
                    }
                    else
                    {
                        tcs.SetException(ex);
                    }
                }
                catch (Exception ex)
                {
                    tcs.SetException(ex);
                }
            }, request);

            return tcs.Task;
        }