Пример #1
0
        private async Task <int> SendBatchRequestAsync(IEnumerable <HttpRequestMessage> requestMessages, CancellationToken cancellationToken = default)
        {
            var batchUri = new Uri(_kestrelHost.BaseUri, "api/batch");
            int count    = 0;

            using (var requestContent = new MultipartContent("batch", "batch_" + Guid.NewGuid()))
            {
                var multipartContent = requestContent;
                foreach (var httpRequestMessage in requestMessages)
                {
                    var content = new HttpApplicationContent(httpRequestMessage);
                    multipartContent.Add(content);
                }

                using (var requestMessage = new HttpRequestMessage(HttpMethod.Post, batchUri)
                {
                    Content = requestContent
                })
                {
                    using (var responseMessage = await _kestrelHost.HttpClient.SendAsync(requestMessage, cancellationToken)
                                                 .ConfigureAwait(false))
                    {
                        var reader = await Multipart.HttpContentExtensions.ReadAsMultipartAsync(responseMessage.Content, cancellationToken).ConfigureAwait(false);

                        MultipartSection section;
                        while ((section = await reader.ReadNextSectionAsync(cancellationToken)) != null)
                        {
                            count++;
                        }
                    }
                }
            }
            return(count);
        }
Пример #2
0
        protected async Task <BatchResults> SendBatchRequestAsync <TBatchResult>(
            IEnumerable <HttpRequestMessage> requestMessages,
            CancellationToken cancellationToken = default) where TBatchResult : BatchResult, new()
        {
            var batchUri = new Uri(_fixture.BaseUri, "api/batch");

            using (var requestContent = new MultipartContent("batch", "batch_" + Guid.NewGuid()))
            {
                var multipartContent = requestContent;
                foreach (var httpRequestMessage in requestMessages)
                {
                    var content = new HttpApplicationContent(httpRequestMessage);
                    multipartContent.Add(content);
                }

                using (var requestMessage = new HttpRequestMessage(HttpMethod.Post, batchUri)
                {
                    Content = requestContent
                })
                {
                    using (var responseMessage = await _fixture.HttpClient.SendAsync(requestMessage, cancellationToken)
                                                 .ConfigureAwait(false))
                    {
                        var response = await responseMessage.Content.ReadAsMultipartAsync(cancellationToken)
                                       .ConfigureAwait(false);

                        var responsePayload =
                            await ReadResponseAsync <TBatchResult>(response, cancellationToken).ConfigureAwait(false);

                        var statusCode = responseMessage.StatusCode;
                        return(new BatchResults {
                            ResponsePayload = responsePayload, StatusCode = statusCode
                        });
                    }
                }
            }
        }