Unsere ASP.net App muss einige Anfragen an einen anderen Server weiterleiten, die Daten abrufen und sie bedienen. Wir können die Daten in eine Datei herunterladen und sie bereitstellen oder den Antwort-Stream direkt vom Ursprungsserver zum Client senden. Die Daten umfassen js/css/images/font files/mp3 usw.C# - Schreiben responseStream in context.response.outputstream
HttpWebRequest forwardRequest = (HttpWebRequest)WebRequest.Create(remoteUrl);
forwardRequest.ContentType = context.Request.ContentType;
forwardRequest.UserAgent = context.Request.UserAgent;
forwardRequest.Method = context.Request.HttpMethod;
//add post check
HttpWebResponse newResponse = (HttpWebResponse)forwardRequest.GetResponse();
MemoryStream ms = new MemoryStream();
newResponse.GetResponseStream().CopyTo(ms);
context.Response.ContentType = newResponse.ContentType;
context.Response.StatusCode = 200;
context.Response.BinaryWrite(ms.GetBuffer());
ms.Close();
context.Response.Flush();
context.Response.Close();
context.Response.End();
Wie kann ich newResponse.GetResponseStream()
-context.Response.OutputStream
direkt übergeben.
Hinweis: '.GetBuffer()' kehrt das ** übergroße ** Backing Array; Ich vermute, dass der 'MemoryStream' hier nicht benötigt wird (und aktiv schädlich ist), aber wenn Sie ihn * brauchen *, sollten Sie nur die ersten' .Length' Bytes von '.GetBuffer()' betrachten - zum Beispiel 'dest.Write (ms.GetBuffer(), 0, (int) ms.Length);' –