[英]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 response
的ContentLength
的問題。
這是我的代碼,代碼的注釋部分是第一種方法,我采用了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.