繁体   English   中英

c# JSON REST 响应通过 3 种不同的方法(WebRequest、RESTSharp、HttpClient)为空,但 Postman 和浏览器有效

[英]c# JSON REST response via 3 different approaches (WebRequest, RESTSharp, HttpClient) is empty, but Postman and browser works

在 C# 中调用在 Postman(或通过 Firefox)中没有问题的特定端点时,我得到一个空响应。

我正在调用的 url 正在返回数据集合。 在 url 参数中,我可以指定我想要多少所述数据。 我已经检查了 Postman 中的响应大小,当我限制 C# 调用中请求的数据量时,响应大约为 700kb,然后我得到一个 JSON 响应。

但是,如果我在 C# 调用中超过此大小,则响应为空 '{ }' 并且返回的 ContentLength = -1(返回的 statusCode 为 200,所以这至少看起来不错)。 在 C# 中失败的相同请求在 Postman 和 Firefox 中工作正常,但是......

我以某种方式怀疑这是因为反序列化器的缓冲区不够大,或者因为响应仍在传输中并且代码在读取整个响应主体之前以某种方式继续执行......

下面是我测试过的 3 个实现:

1:

var httpClient = new HttpClient();
var responseMessage = await httpClient.GetAsync(requestUrl, HttpCompletionOption.ResponseHeadersRead);
if (responseMessage.StatusCode == System.Net.HttpStatusCode.OK)
{
      using (var httpStream = await responseMessage.Content.ReadAsStreamAsync())
      {
           using (var sr = new StreamReader(httpStream))
           {
               Info(await sr.ReadToEndAsync()); //Info logs the string to a file
           }
      }
}

2 (RESTSharp):

var client = new RestClient();
var request = new RestRequest(requestUrl, Method.GET, DataFormat.Json);
Info(request.Content); //Info logs the string to a file

3:

var httpWebRequest = (HttpWebRequest)WebRequest.Create(requestUrl);
httpWebRequest.ContentType = "application/json; charset-utf8";
var httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse;
var binReader = new BinaryReader(responseStream);
const int bufferSize = 4096;
byte[] responseBytes;
using (MemoryStream ms = new MemoryStream())
{
   byte[] buffer = new byte[bufferSize];
   int count;
   while ((count = binReader.Read(buffer, 0, buffer.Length)) != 0)
   {
         ms.Write(buffer, 0, count);
   }
   responseBytes = ms.ToArray();
}
Info(Encoding.UTF8.GetString(responseBytes, 0, responseBytes.Length)); //Info logs the string to a file

我没有修改 HttpClient.MaxResponseContentBufferSize 属性,但为了更好的衡量,我也尝试过更改此值,但无济于事。

我该如何解决这个问题?

我发现了这个问题,它是由我连接的后端服务引起的。 再次感谢@Panagiotis Kanavos

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM