[英]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屬性。 不同的流根據其實現支持不同的屬性。
您可以使用其他方式從流中讀取內容,如下所示:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.