none
Windows UWP App => Get Content of Webpage RRS feed

  • Frage

  • I tried several aproaches to load an HTML and get a list of all containing URLs there.

    Now I want to go for it in a UWP App. But here I have the Problem just loading a HTML Page into a string. Somehow it has something to do with "async" behave of those Methods.

    The following Code compiles but run against a failure when I open a Webpage:

    amespace ScrapeUWP1
    {
        /// <summary>
        /// Eine leere Seite, die eigenständig verwendet oder zu der innerhalb eines Rahmens navigiert werden kann.
        /// </summary>
        public sealed partial class MainPage : Page
        {
            public string MyPage;
            public MainPage()
            {
                this.InitializeComponent();
            }
            private void button_Click(object sender, RoutedEventArgs e)
            {
                myTextBox.Text = MyPage;
            }
            public async void GetMyWebpage()
            {
                var uri = new Uri("http://mypage.com/home.html");
                var httpClient = new HttpClient();
                try
                {
                    var result = await httpClient.GetStringAsync(uri);
                    MyPage = result.ToString();
                }
                catch
                {
                    // Exception handling hierher      
                }
            }

        }
    }

    What is wrong with this snippet?

    Montag, 28. März 2016 21:01

Antworten

  • Der Code aus deiner Antwort passt n icht, denn ich habe keinen Webview.

    Ich habe mit UWP nur den HTTPClient

    Mein Fehler war, das ich die Funktion nicht richtig aufgerufen habe. Hier ist der Code:

        public sealed partial class MainPage : Page
        {
            public string MyPage="Please wait for Response of the webpage";
     
            public MainPage()
            {
                this.InitializeComponent();
            }

            private void button_Click(object sender, RoutedEventArgs e)
            {
                GetMyWebpage();
                myTextBox.Text = MyPage;
            }

            public async void GetMyWebpage()
            {
                var uri = new Uri("https://htmlagilitypack.codeplex.com/");
                var httpClient = new HttpClient();


                try
                {
                    var result = await httpClient.GetStringAsync(uri);
                   
                    MyPage = result.ToString();
                }

                catch
                {
                    MyPage = "";      
                }
            }

        }

    • Als Antwort markiert jodahush Dienstag, 29. März 2016 16:03
    Dienstag, 29. März 2016 16:03

Alle Antworten

  • Hallo Jodahush,

    sieh Dir den folgenden Artikeln an:

    http://stackoverflow.com/questions/33574852/uwp-webview-get-links-from-webpage-into-an-array

    Gruß

    Aleksander


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht,  kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Dienstag, 29. März 2016 07:59
  • Erst mal danke.

    Also so? string html = await webview.IAsyncOperation<String> InvokeScriptAsync(
      string scriptName,
      string[] arguments
    )

    Werde ich nachher mal prüfen.

                string URLInhalt;        

            public int AccessTheWebAsync()
            { 
                HttpClient client = new HttpClient();    
                 getStringTask = client.GetStringAsync http://msdn.microsoft.com);                                                                                                     
                URLInhalt = await getStringTask;    
                return urlContents.Length;
            }

    Dienstag, 29. März 2016 11:17
  • Der Code aus deiner Antwort passt n icht, denn ich habe keinen Webview.

    Ich habe mit UWP nur den HTTPClient

    Mein Fehler war, das ich die Funktion nicht richtig aufgerufen habe. Hier ist der Code:

        public sealed partial class MainPage : Page
        {
            public string MyPage="Please wait for Response of the webpage";
     
            public MainPage()
            {
                this.InitializeComponent();
            }

            private void button_Click(object sender, RoutedEventArgs e)
            {
                GetMyWebpage();
                myTextBox.Text = MyPage;
            }

            public async void GetMyWebpage()
            {
                var uri = new Uri("https://htmlagilitypack.codeplex.com/");
                var httpClient = new HttpClient();


                try
                {
                    var result = await httpClient.GetStringAsync(uri);
                   
                    MyPage = result.ToString();
                }

                catch
                {
                    MyPage = "";      
                }
            }

        }

    • Als Antwort markiert jodahush Dienstag, 29. März 2016 16:03
    Dienstag, 29. März 2016 16:03
  • Hallo,

    dein gezeigter Code ist immer noch nicht ganz richtig, da du kein await vor dem Aufruf von GetMyWebpage hast. So könnte es passieren, dass MyPage zugewiesen wird, nachdem du myTextBox.Text mit dem Wert von MyPage befüllt hast.

    Passe also entsprechend den Aufruf an:

    private async void button_Click(object sender, RoutedEventArgs e)
    {
        await GetMyWebpage();
        myTextBox.Text = MyPage;
    }


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Dienstag, 29. März 2016 22:29
    Moderator
  • Hallo Tom,

    danke, ja das hatte ich auch so verstanden. Jetzt wollte ich das await ergänzen aber das mag er nicht:

            private async void URLList_Tapped(object sender, TappedRoutedEventArgs e)
            {
                StaffelList.Items.Clear();
                StaffelListe.Clear();
                int i = this.URLList.SelectedIndex;
                MySeries = Startpage + FilmListe[i].Href.ToString();
                await GetMyWebpage(Startpage + FilmListe[i].Href.ToString(), StaffelList, StaffelListe, FilmListe[i].Href.ToString(),2);
                rootPivot.SelectedIndex = 1;
            }

    Das await mag er n icht. Sagt er kann nicht auf void warten.


    Hermann

    Dienstag, 19. April 2016 18:17
  • Weil GetMyWebpage einen Task zurück geben musst. Das habe ich vergessen zu erwähnen:
    public async Task GetMyWebpage()
    
    Da du in der Methode await verwendest, musst du nicht explizit selbst etwas zurück geben. Das Übernimmt der Compiler für dich.

    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Dienstag, 19. April 2016 19:08
    Moderator