2009-06-18 14 views

答えて

19

投稿するデータがbyte[]あるようです。その場合、私はあなたがそれが簡単に使用することを見つけることを期待:

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

と応答は、テキスト、のようなものであるか:

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

(またはEncodingのあなたの選択 - おそらくEncoding.UTF8

+0

HTTP 500の応答を読み取ろうとしていないと、例外であることがわかります。しかし、あなたの答えは確かに質問の要件を満たしています。 –

+0

質問を明確にすることができます。それはHttpWebRequestを使用することを含むかもしれません... –

+0

質問はhttp://stackoverflow.com/questions/1015020/how-to-read-an-asp-net-internal-server-error-description-with-netで続きます –

2

巨大なバイト配列を割り当てるのを避けたい場合(たとえば、大きなファイルを投稿する予定の場合など)は、WebClientの派生バージョンでも実行できます。ここでそれを行うサンプルコードです。

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

そして、ここでカスタマイズされたWebクライアントである:

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; 
    } 
} 
関連する問題