从 HttpWebResponse 中读取完整响应

3
我需要从API获取完整的响应,但我总是只得到65536字节,内容长度显示为176579。我尝试不停地读取,但仍然只得到65536字节。使用Postman可以获取完整答案,那么从WebResponse中读取的正确方法是什么?以下是我的代码:
string json = Request.ToJson(data);
string method = "POST";
string ContentType = "application/json; charset=utf-8";

HttpWebRequest client = (HttpWebRequest)WebRequest.Create(uri);
client.Method = method;
client.KeepAlive = true;
client.Timeout = 3000;
client.ReadWriteTimeout = 50000;
client.AllowWriteStreamBuffering = true;
client.ContentType = ContentType;                

using (var streamWriter = new StreamWriter(client.GetRequestStream()))
{
    streamWriter.Write(json);
    streamWriter.Flush();
    streamWriter.Close();
}

var errorResponse = client.GetResponse();
byte[] dt = ReadFully(errorResponse.GetResponseStream(), errorResponse.ContentLength);
var str = System.Text.Encoding.Default.GetString(dt);

这里是ReadFully方法(从另一个答案复制):

private byte[] ReadFully(Stream stream, long initialLength)
{
    // If we've been passed an unhelpful initial length, just
    // use 32K.
    byte[] bytes;
    using (MemoryStream buffer = new MemoryStream((int)initialLength))
    {
        byte[] chunk = new byte[initialLength];
        int bytesRead;
        while ((bytesRead = stream.Read(chunk, 0, chunk.Length)) > 0)
        {
            buffer.Write(chunk, 0, bytesRead);
        }

        bytes = buffer.ToArray();
    }

    return bytes;
}

这是实际的代码吗?还是errorResponse变量来自WebException.Response属性?因为如果您尝试读取WebException的Response属性,它将被限制为65536字节(您可以通过设置HttpWebRequest.DefaultMaximumErrorResponseLength来增加)。 - Darin Dimitrov
从WebException.Response属性中获取的errorResponse,我仍然需要使用。 - user7925257
Darin,你太棒了。谢谢。HttpWebRequest.DefaultMaximumErrorResponseLength就是我需要的。谢谢。把它作为答案发布,我会投票支持的。 - user7925257
1个回答

0
如评论中所示,似乎errorResponse变量是从WebException.Response中获取的。在读取底层流时存在65536字节的限制。您可以通过设置以下静态属性来增加此限制:
HttpWebRequest.DefaultMaximumErrorResponseLength = some reasonably large number

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接