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); }
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 }); } } } }