来自HttpWebResponse的流的奇怪行为



我在从HttpWebResponse读取流时遇到了一些奇怪的问题。在成功响应(200状态码)的情况下,当访问流的长度属性时,我得到异常。但在webeexception的情况下,当服务器返回一些错误(例如BadRequest),一切都是完美的,长度工作正常。我可以直接从HttpWebResponse获得ContentLength,但想知道这种行为的原因。下面是两种情况的调试截图

        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);
        }

作为响应的一部分在内部创建的流(ConnectStream)不支持Length属性。不同的流支持不同的属性,这取决于它们的实现。

你可以用一种不同的方式从流中读取,就像这篇文章:

c#如何将System.Net.ConnectStream转换为byte[] (array)

相关内容

  • 没有找到相关文章

最新更新