Frage

Siehe den Code:

using (var client = new WebClient())
{
    using (var stream = client.OpenWrite("http://localhost/", "POST"))
    {
        stream.Write(post, 0, post.Length);
    }
}

Nun, wie lese ich die HTTP-Ausgabe?

War es hilfreich?

Lösung

Es sieht aus wie Sie eine byte[] von Daten zu posten; wobei in diesem Fall erwarte ich finden Sie es einfacher zu bedienen:

byte[] response = client.UploadData(address, post);

Und wenn die Antwort Text, so etwas wie:

string s = client.Encoding.GetString(response);

(oder Ihre Wahl von Encoding - vielleicht Encoding.UTF8)

Andere Tipps

Wenn Sie Ströme wollen überall halten und vermeiden großen Arrays von Bytes Zuteilung, die eine gute Praxis (zum Beispiel, wenn Sie große Dateien schreiben planen) ist, noch können Sie es tun mit einer abgeleiteten Version von WebClient. Hier ist ein Beispielcode, der es tut.

using (var client = new WebClientWithResponse())
{
    using (var stream = client.OpenWrite(myUrl))
    {
        // open a huge local file and send it
        using (var file = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
        {
            file.CopyTo(stream);
        }
    }

    // get response as an array of bytes. You'll need some encoding to convert to string, etc.
    var bytes = client.Response;
}

Und hier ist das maßgeschneiderte WebClient:

public class WebClientWithResponse : WebClient
{
    // we will store the response here. We could store it elsewhere if needed.
    // This presumes the response is not a huge array...
    public byte[] Response { get; private set; }

    protected override WebResponse GetWebResponse(WebRequest request)
    {
        var response = base.GetWebResponse(request);
        var httpResponse = response as HttpWebResponse;
        if (httpResponse != null)
        {
            using (var stream = httpResponse.GetResponseStream())
            {
                using (var ms = new MemoryStream())
                {
                    stream.CopyTo(ms);
                    Response = ms.ToArray();
                }
            }
        }
        return response;
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top