public static async Task GetWebRequestAsync()

in aliyun-net-credentials/Http/HttpResponse.cs [275:333]


        public static async Task<HttpWebRequest> GetWebRequestAsync(HttpRequest request)
        {
            var uri = new Uri(request.Url);
            var httpWebRequest = (HttpWebRequest)WebRequest.Create(uri);

            httpWebRequest.Method = request.Method.ToString();
            httpWebRequest.KeepAlive = true;

            httpWebRequest.Timeout =
                request.ConnectTimeout > 0 ? request.ConnectTimeout : DefaultConnectTimeoutInMilliSeconds;

            httpWebRequest.ReadWriteTimeout =
                request.ReadTimeout > 0 ? request.ReadTimeout : DefaultReadTimeoutInMilliSeconds;
            

            if (DictionaryUtil.Get(request.Headers, "Accept") != null)
            {
                httpWebRequest.Accept = DictionaryUtil.Pop(request.Headers, "Accept");
            }

            if (DictionaryUtil.Get(request.Headers, "Date") != null)
            {
                var headerDate = DictionaryUtil.Pop(request.Headers, "Date");
                httpWebRequest.Date = Convert.ToDateTime(headerDate);
            }

            foreach (var header in request.Headers)
            {
                // deal with restricted headers on .NET Framework
                if (header.Key.Equals("Content-Length"))
                {
                    httpWebRequest.ContentLength = long.Parse(header.Value);
                    continue;
                }

                if (header.Key.Equals("Content-Type"))
                {
                    httpWebRequest.ContentType = header.Value;
                    continue;
                }
                
                if (header.Key.Equals("User-Agent"))
                {
                    httpWebRequest.UserAgent = header.Value;
                    continue;
                }

                httpWebRequest.Headers.Add(header.Key, header.Value);
            }

            if ((request.Method != MethodType.POST && request.Method != MethodType.PUT) || request.Content == null)
                return httpWebRequest;
            using (var stream = await httpWebRequest.GetRequestStreamAsync())
            {
                await stream.WriteAsync(request.Content, 0, request.Content.Length);
            }

            return httpWebRequest;
        }