gpt4 book ai didi

c# - HTTPWebResponse 响应字符串被截断

转载 作者:可可西里 更新时间:2023-11-01 16:18:10 29 4
gpt4 key购买 nike

应用正在与 REST 服务对话。Fiddler 显示完整的良好 XML 响应作为 Apps 响应该应用程序位于法属波利尼西亚,在新西兰有一个相同的副本,所以主要嫌疑人似乎在编码,但我们已经检查过了,结果空手而归。

查看流读取器的输出字符串(UTF8 编码),您可以看到它被截断的位置。它位于一段无害的 xml 中。 XmlDocument 对象的下游错误声称在将字符串加载到 XML 文档对象时遇到了意外的文件结尾,这很公平。

截断点是
ns6:sts-krn>1&

这是一部分ns6:sts-krn>1<

我们应该检查的响应字符串或其他一些参数是否有任何大小限制。我完全没有想法。代码按要求提供。

Stream streamResponse = response.GetResponseStream();
StringBuilder sb = new StringBuilder();

Encoding encode = Encoding.GetEncoding("utf-8");
if (streamResponse != null)
{
StreamReader readStream = new StreamReader(streamResponse, encode);
while (readStream.Peek() >= 0)
{
sb.Append((char)readStream.Read());
}
streamResponse.Close();
}

最佳答案

您需要使用 using block :

using (WebResponse response = request.GetResponse())
{
using (Stream streamResponse = response.GetResponseStream())
{
StringBuilder sb = new StringBuilder();

if (streamResponse != null)
{
using (StreamReader readStream = new StreamReader(streamResponse, Encoding.UTF8))
{
sb.Append(readStream.ReadToEnd());
}
}
}
}

这将确保您的 WebResponseStreamStreamReader 都得到清理,无论是否有任何异常。


让我想到使用 block 的原因是:

  1. 一些操作没有完成
  2. 没有隐藏异常的 try/catch block ,因此如果操作由于异常而未完成,我们就会知道。
  3. 有实现 IDisposable 的对象不在 using block 中

结论:尝试实现 using block 以查看处置对象是否会导致操作完成。

我添加这个是因为推理实际上很笼统。同样的推理适用于“我的邮件消息在两分钟内没有发送”。在这种情况下,未完成的操作是“发送电子邮件”,实例是 SmtpClientMailMessage 对象。

关于c# - HTTPWebResponse 响应字符串被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24196324/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com