2009-06-18 8 views

Répondre

19

Il semble que vous ayez un byte[] de données à afficher; dans ce cas, je pense que vous le trouverez plus facile à utiliser:

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

Et si la réponse est un texte, quelque chose comme:

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

(ou votre choix de Encoding - peut-être Encoding.UTF8)

+0

Cela fonctionnerait, si je n'essayais pas de lire une réponse HTTP 500, qui devient une exception. Mais votre réponse répond sûrement aux exigences de la question. –

+0

Vous voudrez peut-être clarifier la question alors; cela peut impliquer l'utilisation de HttpWebRequest ... –

+0

La question s'est poursuivie à http://stackoverflow.com/questions/1015020/how-to-read-an-asp-net-internal-server-error-description-with-net –

2

Si vous souhaitez conserver des flux partout et éviter d'allouer d'énormes tableaux d'octets, ce qui est une bonne pratique (par exemple, si vous envisagez de publier de gros fichiers), vous pouvez toujours le faire avec une version dérivée de WebClient. Voici un exemple de code qui le fait.

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

Et voici le WebClient personnalisé:

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