コード例 #1
0
        public async Task <WebCallResponse> Execute(string qString, string exBody = null, HttpMethod exVerb = null)
        {
            int retries = 0;

            var wcr = new WebCallRequest {
                FullUri    = GetUri(BaseUri, Stem, qString),
                Verb       = exVerb ?? Verb,
                Body       = exBody,
                AllHeaders = new NameValueCollection(headers)
            };

            var f = await ActualCall(wcr);

            while ((f.Status != HttpStatusCode.OK) && (f.Status != HttpStatusCode.NotFound))
            {
                retries++;
                if (retries >= RetryCount)
                {
                    break;
                }
                f = await ActualCall(wcr);
            }

            return(f);
        }
コード例 #2
0
        protected virtual async Task <WebCallResponse> ActualCall(WebCallRequest wcr)
        {
            var result  = new WebCallResponse();
            var request = (HttpWebRequest)WebRequest.Create(wcr.FullUri);

            request.Method = wcr.Verb.Method;

            if (!string.IsNullOrWhiteSpace(Host))
            {
                request.Host = Host;
            }

            request.Headers.Add(wcr.AllHeaders);

            //Invalid SSL Certificate support.
            if (AcceptAllCerts)
            {
                ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => { return(true); };
            }
            else if (NameCheckSSLCallback != null)
            {
                ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => { return(cert.Issuer.ToLower().Contains(namneCheckStringValue)); };
            }



            try {
                b.Verbose.Log(wcr.DiagnosticSummary());


                if (!string.IsNullOrEmpty(wcr.Body))
                {
                    var encoding  = new UTF8Encoding();
                    var byteArray = encoding.GetBytes(wcr.Body);

                    request.ContentLength = byteArray.Length;
                    request.ContentType   = @"application/json";

                    using (Stream dataStream = request.GetRequestStream()) {
                        dataStream.Write(byteArray, 0, byteArray.Length);
                    }
                }
                else
                {
                    request.ContentLength = 0;
                }



                var    req            = request.GetResponseAsync();
                Stream responseStream = null;
                try {
                    try {
                        var response = await req.ConfigureAwait(false);

                        responseStream = response.GetResponseStream();



                        using (StreamReader reader = new StreamReader(responseStream, Encoding.UTF8)) {
                            responseStream      = null;
                            result.ResponseText = await reader.ReadToEndAsync().ConfigureAwait(false);

                            // TODO : Dont log what could be a massive string out  b.Log.Summarise();
                            b.Verbose.Log(result.ResponseText);
                        }

                        result.Status    = HttpStatusCode.OK;
                        result.Exception = null;
                    } catch (WebException wx) {
                        result.Exception = wx;
                        if (wx.Status == WebExceptionStatus.ProtocolError)
                        {
                            if (wx.Response is HttpWebResponse r)
                            {
                                result.Status = r.StatusCode;
                            }
                        }
                    } finally {
                        responseStream?.Dispose();
                    }
                } finally {
                    req?.Dispose();
                }
            } catch (Exception ex) {
                b.Error.Dump(ex, $"httpActualCAll Failed {wcr.FullUri}");
                throw;
            }

            return(result);
        }