だから私は次のような関数を持っています:
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 をデシリアライズできません。
コードはかなり明確だと思いましたが、これらのバイトを失うのがどこで間違っているのかわかりません。
助けてくれてありがとう!