Я написал метод веб-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;
}