示例#1
0
        private HttpResponseMessage TrySending(HttpRequestMessage request, HttpRequestMessageRequestDetails requestDetails, PipelineOptions options)
        {
            var adapter = _adapterFactory.CreateClient(options);
            HttpResponseMessage response;

            try
            {
                response = adapter.SendAsync(request).Result;
            }
            catch (AggregateException exception)
            {
                if (SendError != null)
                {
                    requestDetails = requestDetails ?? new HttpRequestMessageRequestDetails(request);
                    SendError(this, new RequestErrorEventArgs(requestDetails, exception.InnerException));
                }
                if (exception.InnerException is TaskCanceledException)
                {
                    throw new TimeoutException("The request timed out");
                }
                throw exception.InnerException;
            }

            if (Responded != null)
            {
                requestDetails = requestDetails ?? new HttpRequestMessageRequestDetails(request);
                Responded(this, new ResponseEventArgs(requestDetails, new HttpResponseMessageResponseDetails(requestDetails, response)));
            }
            ApplyPipelineToResponse(response, options);
            options.AssertAllRequestResponseOptionsWereUsed();
            return(response);
        }
示例#2
0
        private HttpRequestMessage CreateRequestMessage(HttpMethod method, string uri, BodyContent body, PipelineOptions options,
                                                        out HttpRequestMessageRequestDetails requestDetails)
        {
            var absoluteUri = AbsoluteUrlOf(uri);
            var request     = new HttpRequestMessage();

            ApplyPipelineToRequest(request, options);
            if (body != null)
            {
                var content = new StreamContent(body.AsStream());
                foreach (var header in body.Headers)
                {
                    content.Headers.Add(header.Key, header.Value);
                }

                request.Content = content;
            }
            request.RequestUri = absoluteUri;
            request.Method     = method;
            requestDetails     = null;
            if (Sending != null)
            {
                requestDetails = new HttpRequestMessageRequestDetails(request);
                Sending(this, new RequestEventArgs(requestDetails));
            }
            return(request);
        }