2009-06-18 10 views

Respuesta

19

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

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

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

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

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

+0

Funcionaría, si no estuviera tratando de leer una respuesta HTTP 500, que se convierte en una excepción. Pero su respuesta seguramente cumple los requisitos de la pregunta. –

+0

Es posible que desee aclarar la pregunta; puede implicar el uso de HttpWebRequest ... –

+0

Pregunta continuada en http://stackoverflow.com/questions/1015020/how-to-read-an-asp-net-internal-server-error-description-with-net –

2

Si desea mantener las transmisiones en todas partes y evitar asignar grandes matrices 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í es el cliente Web personalizada:

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