Веб-API: не удалось создать исключение в «PushStreamContent» - PullRequest
0 голосов
/ 29 августа 2018

Я написал метод веб-API для загрузки нескольких файлов в виде zip-файла. И нужно выдать ошибку, говорящую, что «Документы не найдены», если zip-файл пуст, поэтому я попытался, как показано ниже, код, но при загрузке пустого zip-файла, и это не выдает ошибку проверки. Где я ошибся? Примечание: он работает / выбрасывает, если я пробую это вне объекта «pushstreamcontent»

Мой метод API,

public async Task<HttpResponseMessage> DownloadMultiDocumentAsync(IClaimedUser user, List<Document> documentList)
{

        CloudBlockBlob blob = null;
        //azure storage connection
        var container = GetBlobClient(tenantInfo);
        //directory reference
        var directory = container.GetDirectoryReference(
            string.Format(DirectoryNameConfigValue, tenantInfo.TenantId.ToString(), documentList[0].ProjectId));

        long streamcontentCount = 0;
        var pushStreamContent = new PushStreamContent((outputStream, httpContent, transportContext) =>
        {
            //zip the multiple files
            using (var zipEntry = new ZipArchive(outputStream, ZipArchiveMode.Create, leaveOpen: false))
            {
                for (int docId = 0; docId < documentList.Count; docId++)
                {
                    blob = directory.GetBlockBlobReference(DocumentNameConfigValue + documentList[docId].DocumentId);
                    if (!blob.Exists())
                        throw new InvalidOperationException("No Documents found in blob storage");

                    MemoryStream memStream = new MemoryStream();
                    blob.DownloadToStreamAsync(memStream);
                    memStream.Position = 0;
                    var createEntry = zipEntry.CreateEntry(documentList[docId].FileName, CompressionLevel.Fastest);
                    using (var stream = createEntry.Open())
                    {
                        memStream.CopyTo(stream);
                        streamcontentCount++;
                    }
                }

            }
        });

        HttpResponseMessage httpResponseMessage = new HttpResponseMessage();
        httpResponseMessage.Content = pushStreamContent;
        httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
        httpResponseMessage.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
        httpResponseMessage.Content.Headers.ContentDisposition.FileName = "Documents.zip";
        httpResponseMessage.StatusCode = HttpStatusCode.OK;
        return httpResponseMessage;

  }
...