C # Читать веб-страницу StreamReader Uri Relative - PullRequest
1 голос
/ 12 июля 2011

Мне нужно Скачать читать содержимое этой веб-страницы. Я использую этот код для приложения для Windows Phone

string html = new StreamReader(Application.GetResourceStream(new Uri("http://www.knbsb.nl/nw/index.php?option=com_content&view=category&layout=blog&id=382&Itemid=150&lang=nl&LevelID=120&CompID=1580", UriKind.Relative)).Stream).ReadToEnd();

Я знаю, что UriKind установлен в Относительный, но он должен быть длядругой сценарий.

Так что в основном я должен сделать веб-страницу для относительного Urikind из абсолютного Uri.Но я не знаю, как это сделать!

Ответы [ 3 ]

2 голосов
/ 12 июля 2011

Вам нужно сделать запрос асинхронно.
Вы можете использовать что-то вроде этого в качестве помощника:

public static void RequestAsync(Uri url, Action<string, Exception> callback)
{
    if (callback == null)
    {
        throw new ArgumentNullException("callback");
    }

    try
    {
        var req = WebRequest.CreateHttp(url);

        AsyncCallback getTheResponse = ar =>
        {
            try
            {
                string responseString;

                var request = (HttpWebRequest)ar.AsyncState;

                using (var resp = (HttpWebResponse)request.EndGetResponse(ar))
                {
                    using (var streamResponse = resp.GetResponseStream())
                    {
                        using (var streamRead = new StreamReader(streamResponse))
                        {
                            responseString = streamRead.ReadToEnd();
                        }
                    }
                }

                callback(responseString, null);
            }
            catch (Exception ex)
            {
                callback(null, ex);
            }
        };

        req.BeginGetResponse(getTheResponse, req);
    }
    catch (Exception ex)
    {
        callback(null, ex);
    }
}

Затем вы можете делать вызовы так:

private void Button_Click(object sender, RoutedEventArgs e)
{
    RequestAsync(
        new Uri("http://www.knbsb.nl/nw/index.php?option=com_content&view=category&layout=blog&id=382&Itemid=150&lang=nl&LevelID=120&CompID=1580"),
        (html, exc) =>
            {
                if (exc == null)
                {
                    Dispatcher.BeginInvoke(() => MessageBox.Show(html));
                }
                else
                {
                    // handle exception appropriately
                }
            });
}
0 голосов
/ 12 июля 2011

Application.GetResourceStream предназначен для чтения ресурсов из пакета приложения, а не для запроса ресурсов из Интернета.

Вместо этого используйте классы HttpWebRequest или WebClient.

Пример:

string html;
using (WebClient client = new WebClient()) {
  html = client.DownloadString("http://www.knbsb.nl/nw/index.php?option=com_content&view=category&layout=blog&id=382&Itemid=150&lang=nl&LevelID=120&CompID=1580");
}
0 голосов
/ 12 июля 2011

Вы можете использовать WebClient , чтобы сделать это.

  using (var client = new WebClient())
        {
            string result = client.DownloadString("http://www.youtsite.com");
//do whatever you want with the string. 

    }
...