Web API Controller konvertiert MemoryStream in StreamContent

Ich habe eine große Sammlung von Bildern auf einem gesicherten Server gespeichert, von denen einige auf einem Portal mit Weltausrichtung angezeigt werden müssen. Der Server des Portals befindet sich in einer DMZ, die zwar Anforderungen zulässt, jedoch verhindert, dass direkte Anforderungen in eine gesicherte Domäne verschoben werden. Die Bilder werden mit SOLR katalogisiert und können über einen internen (Apache?) Server von @ heruntergeladen werdehttp://intenalname/folderA/folderAB/file.jpg

Innerhalb meinesPhotoController Ich kann eine Instanz des @ erstellWebClient, gib die URL ein und erhalte einMemoryStream. Wenn ich versuche, diesen Speicherstrom zum Auffüllen der Antwort zu verwenden. Content Ich erhalte eine leere Antwort (pro Geiger). Wenn ich den Speicherstrom zum Schreiben in eine lokale Datei verwende, lese ich die Datei (mit FileStream und FileInfo) "wie erwartet".

Ich sollte in der Lage sein, von einem @ zu bekommMemoryStream zuStreamContent ohne das Dateisystem zu durchlaufen (sollte ich nicht) ?? aber wie? Der Standardkonstruktor fürStreamContent(stream) akzeptiert die Memory Stream-Instanz ohne einen Compiler-Fehler ... aber es funktioniert einfach nicht.

HttpResponseMessage response = Request.CreateResponse();

using (WebClient webClient = new WebClient())
{
    string url = string.Format(PHOTO_GET, filePath);
    using (MemoryStream memoryStream = new MemoryStream(webClient.DownloadData(url)))
    {
        // If these lines are unremarked the stream moves 'through' the file system and works (?!)
        //memoryStream.Position = 0;
        //string tempName = @"c:\test\" + Guid.NewGuid().ToString() + ".jpg";
        //var fs = new FileStream(tempName, FileMode.OpenOrCreate);
        //stream.CopyTo(fs);
        //fs.Close();
        //FileInfo fi = new FileInfo(tempName);

        response.Headers.AcceptRanges.Add("bytes");
        response.StatusCode = HttpStatusCode.OK;
        //response.Content =  new StreamContent(fi.ReadStream());
        response.Content = new StreamContent(memoryStream);
        response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("render");
        response.Content.Headers.ContentDisposition.FileName = fileName;
        response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpg");//("application/octet-stream");
        response.Content.Headers.ContentLength = memoryStream.Length;

    }

}
return response;

Wenn ich über Fiddler teste, bekomme ich:

[Fiddler] ReadResponse () fehlgeschlagen: Der Server hat keine vollständige Antwort für diese Anforderung zurückgegeben. Der Server hat 0 Bytes zurückgegeben.

(Beim Durchlaufen von FileStream zeigt mir Fiddler das Bild.)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage