我正在通过C#Windows服务调用API。在某些情况下,会引发以下错误。
请求正文未包含指定的字节数。得到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;
是否必须在REST API调用中提供内容长度?
编辑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();
}
答案 0 :(得分:0)
我建议也许可以尝试使用HttpClient,如mjwills here的链接文章中所述。您不必使用内容长度,但是听起来这是由API强制执行的,最终您会尝试发布太多内容。
否则,我看到的是某种原因使请求主体太大。是序列化的输入数据被编码为字节数组吗?如果发生这种情况,那么可能就没有对构成请求主体的数据执行正确的长度要求,我建议检查请求主体对象本身的构成中发生了什么。