簡體   English   中英

C#UWP HttpWebResponse分塊

[英]C# UWP HttpWebResponse Chunked

我在讀取流響應時遇到問題,因為我無法讀取響應結束。

這是從服務器響應:

 Server : "Apache-Coyote/1.1"
 Transfer-Encoding : "chunked"
 Content-Type: "multipart/mixed; boundary=F34D3847AEDEB14FF5967BF7426EECF6"

我嘗試閱讀此回復:

var response = (HttpWebResponse)await httpWebRequest.GetResponseAsync();
using(var read = new StreamReader(response.GetResponseStream())
 {
   var result = await read.ReadToEndAsync();
 }

和這種方法:

StringBuilder sb = new StringBuilder();
Byte[] buf = new byte[8192];
Stream resStream = response.GetResponseStream();
string tmpString = null;
int count = 0;
do
{
count = resStream.Read(buf, 0, buf.Length);
if(count != 0)
{
      tmpString = Encoding.ASCII.GetString(buf, 0, count);
      sb.Append(tmpString);
}
}while (count > 0);

錯誤信息 :

Exception from HRESULT: 0x80072EE4
I/O error occurred.
Exception thrown: 'System.IO.IOException' in mscorlib.ni.dll
Exception thrown: 'System.IO.IOException' in mscorlib.ni.dll

不幸的是,它不起作用,僅得到響應的片段。 謝謝您的幫助

我測試了您的代碼,對於您采用的第一種方法,它對我來說工作正常,我剛剛在其中添加了Dispose() 對於第二種方法,我認為這可能是您沒有獲得var responseContentLength的問題。

這是我的代碼,代碼的注釋部分是第一種方法,我采用了Button Click事件來處理此問題:

  public async void HTTP(object sender, RoutedEventArgs e)
        {
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("URL");
            HttpWebResponse response = (HttpWebResponse)await httpWebRequest.GetResponseAsync();
            Stream resStream = response.GetResponseStream();            

            StringBuilder sb = new StringBuilder();

            StreamReader read = new StreamReader(resStream);
            string tmpString = null;
            int count = (int)response.ContentLength;
            int offset = 0;
            Byte[] buf = new byte[count];
            do
            {
                int n = resStream.Read(buf, offset, count);
                if (n == 0) break;
                count -= n;
                offset += n;
                tmpString = Encoding.ASCII.GetString(buf, 0, buf.Length);
                sb.Append(tmpString);
            } while (count > 0);

            text.Text = tmpString;


            read.Dispose();

            //using (StreamReader read = new StreamReader(resStream))
            //{
            //    var result = await read.ReadToEndAsync();
            //    text.Text = result;
            //    read.Dispose();
            //}

            response.Dispose();

        }

我已經對其進行了測試,並且效果很好。

暫無
暫無

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

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