Pregunta

Mira el código:

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

Ahora, ¿cómo leo la salida HTTP?

¿Fue útil?

Solución

Parece que tiene un byte [] de datos para publicar; en cuyo caso espero que sea más fácil de usar:

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

Y si la respuesta es texto, algo así como:

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

(o su elección de Encoding - quizás Encoding.UTF8 )

Otros consejos

Si desea mantener las transmisiones en todas partes y evitar la asignación de grandes conjuntos de bytes, lo cual es una buena práctica (por ejemplo, si planea publicar archivos grandes), aún puede hacerlo con una versión derivada de WebClient. Aquí hay un código de muestra que lo hace.

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;
}

Y aquí está el WebClient personalizado:

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;
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top