private async Task <StreamedResponse> ExecuteInternal(Request request, CancellationToken cancellationToken) { var responseMessage = await ExecuteRequest(request, cancellationToken); var response = new StreamedResponse(async() => { var contentStream = await responseMessage.Content.ReadAsStreamAsync(); // if there is a content-hash header value, we'll have to verify the returned stream with that hash var expectedHash = responseMessage.Content.Headers.ContentMD5; if (expectedHash != null) { return(new MD5VerifiedStream(contentStream, expectedHash)); } else { return(contentStream); } }, responseMessage.Content.Headers.ContentLength) { StatusCode = responseMessage.StatusCode, Timestamp = responseMessage.Headers.GetSingleHeaderValueAsDateTime(mwsTimestampHeaderName) ?? DateTimeOffset.UtcNow }; response.Quota = ParseQuota(responseMessage, response.Timestamp); if (!response.Success) { await ReadError(responseMessage, response); } return(response); }
public Task <StreamedResponse> Execute(Request request, CancellationToken cancellationToken = default) { if (configuredResult is Stream stream) { var expectedLength = stream.CanSeek ? (long?)stream.Length : null; var response = new StreamedResponse(() => Task.FromResult(stream), expectedLength) { StatusCode = System.Net.HttpStatusCode.OK }; return(Task.FromResult(response)); } else { throw new InvalidOperationException("No expected stream configured"); } }