コード見よ:今データを投稿した後にWebClientレスポンスを読み取る方法は?
using (var client = new WebClient())
{
using (var stream = client.OpenWrite("http://localhost/", "POST"))
{
stream.Write(post, 0, post.Length);
}
}
を、どのように私は、HTTP出力を読みますか。
コード見よ:今データを投稿した後にWebClientレスポンスを読み取る方法は?
using (var client = new WebClient())
{
using (var stream = client.OpenWrite("http://localhost/", "POST"))
{
stream.Write(post, 0, post.Length);
}
}
を、どのように私は、HTTP出力を読みますか。
投稿するデータがbyte[]
あるようです。その場合、私はあなたがそれが簡単に使用することを見つけることを期待:
byte[] response = client.UploadData(address, post);
と応答は、テキスト、のようなものであるか:
string s = client.Encoding.GetString(response);
(またはEncoding
のあなたの選択 - おそらくEncoding.UTF8
)
HTTP 500の応答を読み取ろうとしていないと、例外であることがわかります。しかし、あなたの答えは確かに質問の要件を満たしています。 –
質問を明確にすることができます。それはHttpWebRequestを使用することを含むかもしれません... –
質問はhttp://stackoverflow.com/questions/1015020/how-to-read-an-asp-net-internal-server-error-description-with-netで続きます –
巨大なバイト配列を割り当てるのを避けたい場合(たとえば、大きなファイルを投稿する予定の場合など)は、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;
}
}
はまたhttp://stackoverflow.com/questions/1694388/webclient-vs-httpwebrequest-httpwebresponseを参照してください。 – DuckMaestro