请求正文未包含指定的字节数

时间:2018-11-09 06:34:53

标签: c# rest

我正在通过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();
}

1 个答案:

答案 0 :(得分:0)

我建议也许可以尝试使用HttpClient,如mjwills here的链接文章中所述。您不必使用内容长度,但是听起来这是由API强制执行的,最终您会尝试发布太多内容。

否则,我看到的是某种原因使请求主体太大。是序列化的输入数据被编码为字节数组吗?如果发生这种情况,那么可能就没有对构成请求主体的数据执行正确的长度要求,我建议检查请求主体对象本身的构成中发生了什么。