2016-10-03 1 views
-2

Ich bin hier mit einer Frage, ich weiß es für Sie einfach, aber ich brauche wirklich zu verstehen, was es tut, Zeile für Zeile ..Api MemoryStream C#, wie funktioniert dieser Code?

using (var stream = new MemoryStream()) 
{ 
    var context = (System.Web.HttpContextBase)Request.Properties["MS_HttpContext"]; 
    context.Request.InputStream.Seek(0, SeekOrigin.Begin); 
    context.Request.InputStream.CopyTo(stream); 
    strContent = Encoding.UTF8.GetString(stream.ToArray()); 
    AppLog.Write("Request content length: " + strContent.Length); 
} 
+3

In diesem Code wird davon ausgegangen, dass die eingehende HTTP-Anforderung einen mit Utf8 codierten Textkörper hat und in eine Zeichenfolge kopiert. Diese Antwort wird dir jedoch nicht helfen. Lesen Sie [fragen] und erklären Sie, welches Problem Sie lösen möchten. – CodeCaster

+0

Entschuldigung für solche Dinge zu fragen, ich meine nicht, Ihre Zeit zu verschwenden .. Vielen Dank für Ihre Hilfe Codecaster –

+1

@CodeCaster und es tut es schlecht; Aufruf von 'stream.ToArray()' (es sei denn, Sie wissen, dass die Länge verwaltbar ist, und Sie mit der Zuweisung in Ordnung sind) ist keine gute Möglichkeit, dies zu tun; es gibt auch keine Notwendigkeit, eine Zeichenfolge zu materialisieren, um die Länge zu finden - "Encoding"/"Encoder" hat Mechanismen, um das effizienter zu machen –

Antwort

1
// create a MemoryStream to act as a buffer for some unspecified data 
using (var stream = new MemoryStream()) 
{ 
    // obtain the http-context (not sure this is a good way to do it) 
    var context = (System.Web.HttpContextBase)Request.Properties["MS_HttpContext"]; 
    // reset the context's input stream to the start 
    context.Request.InputStream.Seek(0, SeekOrigin.Begin); 
    // copy the input stream to the buffer we allocated before 
    context.Request.InputStream.CopyTo(stream); 
    // create an array from the buffer, then use that array to 
    // create a string via the UTF8 encoding 
    strContent = Encoding.UTF8.GetString(stream.ToArray()); 
    // write the number of characters in the string to the log 
    AppLog.Write("Request content length: " + strContent.Length); 
} 

Beachten Sie, dass hier praktisch alles, was getan werden könnte, viel effizienter. Dies ist kein guter Beispielcode.

+0

Danke, dass du dir Zeit genommen hast! Ich weiß, es ist eine Dummy-Frage, was ich getan habe, aber vielen Dank! –