Al utilizar la API web de ASP.NET, ¿cómo puede un controlador devolver una colección de imágenes transmitidas mediante la biblioteca DotNetZip?

¿Cómo puedo crear un controlador de API web que genere y devuelva un archivo zip comprimido transmitido desde una colección de archivos JPEG en memoria (objetos de MemoryStream)? Estoy intentando usar la biblioteca DotNetZip. Encontré este ejemplo:http://www.4guysfromrolla.com/articles/092910-1.aspx#postadlink. Pero Response.OutputStream no está disponible en la API web, por lo que esa técnica no funciona bien. Por lo tanto, intenté guardar el archivo zip en un nuevo MemoryStream; pero tiró. Por último, he intentado utilizar PushStreamContent. Aquí está mi código:

    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.Save (memStream) lanza una referencia nula. Pero ni zipFile ni memStream son nulos y no hay una excepción interna. Así que no estoy seguro de lo que está causando la referencia nula. Tengo muy poca experiencia con Web API, flujos de memoria, y nunca he usado DotNetZipLibrary antes. Este es un seguimiento de esta pregunta:Desea un controlador web API ASP.NET eficiente que pueda devolver de manera confiable 30 a 50 ~ 3MB JPEG

¿Algunas ideas? ¡Gracias!

Respuestas a la pregunta(4)

Su respuesta a la pregunta