簡體   English   中英

來自HttpWebResponse的Stream的奇怪行為

[英]Strange behavior of Stream from HttpWebResponse

從HttpWebResponse讀取流時遇到了一些奇怪的問題。 在成功響應的情況下(200狀態代碼),當訪問流的Length屬性時出現異常。 但是在WebException的情況下,當服務器返回一些錯誤(例如BadRequest)時,一切都完美無缺,Length可以正常工作。 我可以直接從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 [](數組)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM