所以我有一个功能,像这样:C#WebResponse流丢失字节?
private String SendRequest(String jsonRequest)
{
WebRequest webRequest = WebRequest.Create(_url);
byte[] paramBytes = Encoding.UTF8.GetBytes(jsonRequest);
byte[] responseBytes;
webRequest.Method = "POST";
webRequest.ContentType = "application/json";
webRequest.ContentLength = paramBytes.Length;
webRequest.Headers.Add("X-Transmission-Session-Id", _sessionId);
using (Stream oStream = webRequest.GetRequestStream())
{
oStream.Write(paramBytes, 0, paramBytes.Length);
}
WebResponse webResponse = webRequest.GetResponse();
using (Stream iStream = webResponse.GetResponseStream())
{
responseBytes = new byte[webResponse.ContentLength];
iStream.Read(responseBytes, 0, (int) webResponse.ContentLength);
}
return Encoding.UTF8.GetString(responseBytes);
}
的问题是,在iStream.Read()阶段,一些字节都将丢失。使用wireshark显示所有的字节被发送到这台机器,但是.net在这个路上的某处丢失了。例如,在我当前的调试会话中,其中webResponse.ContentLength = 4746字节[3949]至字节[4745]均为0,但它们应该填充。因此,UTF8 JSON字符串提前切断,我无法对JSON进行反序列化。
我认为代码非常清晰,我看不到错在哪里去释放这些字节。
感谢您的帮助!