كيف يمكنني قراءة دفق استجابة Http مرتين في C#؟

StackOverflow https://stackoverflow.com/questions/147941

  •  02-07-2019
  •  | 
  •  

سؤال

أحاول قراءة دفق استجابة Http مرتين عبر ما يلي:

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
stream = response.GetResponseStream();
RssReader reader = new RssReader(stream);
do
{
  element = reader.Read();
  if (element is RssChannel)
  {
    feed.Channels.Add((RssChannel)element);
  }
} while (element != null);

StreamReader sr = new StreamReader(stream);
feed._FeedRawData = sr.ReadToEnd();

ومع ذلك، عند تنفيذ تعليمات StreamReader البرمجية، لا يتم إرجاع أي بيانات لأن الدفق قد وصل الآن إلى النهاية.لقد حاولت إعادة تعيين الدفق عبر الدفق.Position = 0 ولكن هذا يطرح استثناءً (أعتقد أنه لا يمكن تغيير موضع الدفق يدويًا).

في الأساس، أرغب في تحليل الدفق لـ XML والحصول على إمكانية الوصول إلى البيانات الأولية (بتنسيق سلسلة).

أيه أفكار؟

هل كانت مفيدة؟

المحلول

انسخه إلى MemoryStream الجديد أولاً.ثم يمكنك إعادة قراءة MemoryStream عدة مرات كما تريد:

Stream responseStream = CopyAndClose(resp.GetResponseStream());
// Do something with the stream
responseStream.Position = 0;
// Do something with the stream again


private static Stream CopyAndClose(Stream inputStream)
{
    const int readSize = 256;
    byte[] buffer = new byte[readSize];
    MemoryStream ms = new MemoryStream();

    int count = inputStream.Read(buffer, 0, readSize);
    while (count > 0)
    {
        ms.Write(buffer, 0, count);
        count = inputStream.Read(buffer, 0, readSize);
    }
    ms.Position = 0;
    inputStream.Close();
    return ms;
}

نصائح أخرى

هل حاولت إعادة ضبط موضع الدفق؟إذا لم ينجح هذا، فيمكنك نسخ الدفق إلى MemoryStream وهناك يمكنك إعادة تعيين الموضع (أي.إلى 0) بقدر ما تريد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top