Тело запроса не содержит указанное количество байтов - PullRequest
0 голосов
/ 09 ноября 2018

Я звоню через API из C # Windows. В некоторых случаях возникает следующая ошибка.

Тело запроса не содержит указанное количество байтов. Получил 101 379, ожидается 102 044

В запросе RAW, полученном с использованием длины содержимого фиддлера, как указано.

Длина содержимого: 102044

В ответе от API я получаю следующее сообщение.

Тело запроса не содержит указанное количество байтов. Получил 101 379, ожидается 102 044

Странно для меня то, что это не происходит для каждого запроса, оно генерируется случайным образом и в разных точках. Код, который я использую для получения длины контента, указан ниже.

var data = Encoding.ASCII.GetBytes(requestBody); // requestBody is the JSON String
webReqeust.ContentLength = data.Length;

Обязательно ли указывать длину содержимого в вызовах API REST?

Редактировать 1:

Вот так выглядит мой пример кода для веб-запроса

webReqeust = (HttpWebRequest)WebRequest.Create(string.Format("{0}{1}", requestURI, queryString));
webReqeust.Method = RequestMethod.ToString();
webReqeust.Headers.Add("Authorization", string.Format("{0} {1}", token_type, access_token)); 
webReqeust.Method = RequestMethod.ToString();
webReqeust.ContentType = "application/json";
var data = Encoding.ASCII.GetBytes(requestBody);
webReqeust.ContentLength = data.Length;
using (var streamWriter = new StreamWriter(webReqeust.GetRequestStream()))
{
    streamWriter.Write(requestBody);
    streamWriter.Flush();
    streamWriter.Close();
}

1 Ответ

0 голосов
/ 26 ноября 2018

Я бы посоветовал вместо этого попробовать использовать HttpClient, как это сделано в связанном посте от mjwills здесь . Вам не нужно использовать длину контента, но похоже, что это обеспечивается API, и в конечном итоге вы пытаетесь опубликовать слишком много.

В противном случае я вижу, что что-то делает тело запроса слишком большим. Это сериализованные входные данные, которые кодируются в байтовый массив? Если это именно то, что происходит, то, возможно, требования к правильной длине не применяются к данным, составляющим тело запроса, и я бы предложил проверить, что происходит в составе самого объекта тела запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...