所以我有一个这样的功能:
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 byte[3949] 到 byte[4745] 都是 0,但应该填充它们。结果,UTF8 JSON 字符串提前中断,我无法反序列化我的 JSON。
我认为代码非常清晰,我看不出丢失这些字节哪里出了问题。
谢谢你的帮助!