À l'aide de l'API Web ASP.NET, comment un contrôleur peut-il renvoyer une collection d'images en streaming compressées à l'aide de DotNetZip Library?

Comment puis-je créer un site Web API contrôleur génère et renvoie un fichier compressé zip diffusés à partir d'une collecte de la mémoire de fichiers JPEG (MemoryStream objets). Je suis d'essayer d'utiliser DotNetZip de la Bibliothèque. J'ai trouvé cet exemple: http://www.4guysfromrolla.com/articles/092910-1.aspx#postadlink. Mais la Réponse.OutputStream n'est pas disponible dans l'API Web et donc que la technique ne fonctionne pas. Donc j'ai essayé d'enregistrer le fichier zip dans un nouveau MemoryStream; mais il l'a jeté. Enfin, j'ai essayé d'utiliser PushStreamContent. Voici mon code:

    public HttpResponseMessage Get(string imageIDsList) {
        var imageIDs = imageIDsList.Split(',').Select(_ => int.Parse(_));
        var any = _dataContext.DeepZoomImages.Select(_ => _.ImageID).Where(_ => imageIDs.Contains(_)).Any();
        if (!any) {
            throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));
        }
        var dzImages = _dataContext.DeepZoomImages.Where(_ => imageIDs.Contains(_.ImageID));
        using (var zipFile = new ZipFile()) {
            foreach (var dzImage in dzImages) {
                var bitmap = GetFullSizeBitmap(dzImage);
                var memoryStream = new MemoryStream();
                bitmap.Save(memoryStream, ImageFormat.Jpeg);
                var fileName = string.Format("{0}.jpg", dzImage.ImageName);
                zipFile.AddEntry(fileName, memoryStream);
            }
            var response = new HttpResponseMessage(HttpStatusCode.OK);
            var memStream = new MemoryStream();
            zipFile.Save(memStream); //Null Reference Exception
            response.Content = new ByteArrayContent(memStream.ToArray());
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/zip");
            response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = string.Format("{0}_images.zip", dzImages.Count()) };
            return response;
        }
    }

zipFile.Enregistrer(memStream) renvoie null référence. Mais ni zipFile ni memStream sont nuls et il n'y a pas d'exception interne. Donc, je ne suis pas sûr de ce qui cause la référence null. J'ai très peu d'expérience avec les API Web, la mémoire des ruisseaux, et je n'ai jamais utilisé DotNetZipLibrary avant. C'est un suivi à cette question: Voulez efficace ASP.NET Web API contrôleur fiable de retour de 30 à 50 ~3 MO Jpeg

Des idées? merci!

source d'informationauteur CalvinDale