从HttpWebResponse读取流时我遇到了一些奇怪的问题。如果响应成功(200状态代码),我在访问流的Length属性时会出现异常。但是在WebException的情况下,当服务器返回一些错误(例如BadRequest)时,一切都很完美,Length工作正常。我可以直接从HttpWebResponse获取ContentLength,但想知道这种行为的原因。 Here is debug screenshot of both cases
try
{
var request = (HttpWebRequest) WebRequest.Create(uriString);
request.Method = HttpMethod.Get.Method;
request.ContentType = "application/json";
response = (HttpWebResponse) request.GetResponse();
statusCode = response.StatusCode;
responseString = DecodeResponse(response);
}
catch (WebException ex)
{
response = (HttpWebResponse) ex.Response;
responseString = DecodeResponse(response);
statusCode = response.StatusCode;
}
private static string DecodeResponse(HttpWebResponse response)
{
byte[] data;
using (Stream stream = response.GetResponseStream())
{
data = new byte[stream.Length];
stream.Read(data, 0, data.Length);
}
return Encoding.UTF8.GetString(data);
}
答案 0 :(得分:0)
作为响应的一部分在内部创建的流(ConnectStream)不支持Length属性。不同的流根据其实现支持不同的属性。
您可以使用不同的方式从流中读取内容:
C# How do i convert System.Net.ConnectStream to a byte[] (array)