C# 发布数据后如何读取WebClient响应?
看看代码:C# 发布数据后如何读取WebClient响应?,c#,.net,webclient,C#,.net,Webclient,看看代码: using (var client = new WebClient()) { using (var stream = client.OpenWrite("http://localhost/", "POST")) { stream.Write(post, 0, post.Length); } } 现在,如何读取HTTP输出?看起来您有一个字节[]的数据要发布;在这种情况下,我希望您会发现它更易于使用: byte[] response = cli
using (var client = new WebClient())
{
using (var stream = client.OpenWrite("http://localhost/", "POST"))
{
stream.Write(post, 0, post.Length);
}
}
现在,如何读取HTTP输出?看起来您有一个
字节[]
的数据要发布;在这种情况下,我希望您会发现它更易于使用:
byte[] response = client.UploadData(address, post);
如果回答是文本,则类似于:
string s = client.Encoding.GetString(response);
(或者选择
编码
——可能是编码.UTF8
)如果您希望在任何地方保留流并避免分配巨大的字节数组,这是一种很好的做法(例如,如果您计划发布大文件),您仍然可以使用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;
}
以下是定制的WebClient:
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 500响应,这将是一个例外。但你的回答肯定符合问题的要求;它可能涉及使用HttpWebRequest…问题继续在您没有回答问题时:(@marcGravel)您是否相信UploadData方法会将整个文件上载包装成多部分,而在这里这是不需要的,并且Ops使用的方法在这种情况下更受欢迎。另请参阅。