asynchrones Zugreifen auf Webressourcen

Abgeschlossen

Das Tätigen von Aufrufen an Webressourcen kann zu langen Wartezeiten für den Benutzer führen. Um das Blockieren des Ui-Threads zu vermeiden, können Sie asynchron auf Webressourcen zugreifen.

Webressourcen

Eine Webressource ist alle Daten oder Dienste, auf die über das Internet zugegriffen werden kann. Dazu gehören Webseiten, Anwendungsprogrammierschnittstellen (Application Programming Interfaces, APIs), Bilder, Videos und andere Arten von Inhalten. Anwendungen rufen Webressource mithilfe von Standardwebprotokollen wie Hypertext Transfer Protocol (HTTP) oder HTTP Secure (HTTPS) ab oder interagieren mit ihr.

Ein gängiger Anwendungsfall für den Zugriff auf Webressourcen besteht darin, Daten von einem Remoteserver oder Dienst abzurufen. Dies kann das Abrufen von JSON- oder XML-Daten, das Herunterladen von Dateien oder die Interaktion mit Web-APIs umfassen. Sie können beispielsweise auf eine Wetter-API zugreifen, um die aktuellen Wetterbedingungen für einen bestimmten Standort abzurufen, oder Sie möchten ein Bild aus einer URL herunterladen.

REST-APIs (Representational State Transfer) sind eine beliebte Möglichkeit für den Zugriff auf Webressourcen, da sie eine standardisierte Methode für die Interaktion mit Webdiensten mit HTTP-Methoden wie GET, POST, PUT und DELETE bieten. REST-APIs werden häufig in der Webentwicklung, mobilen Anwendungen und Clouddiensten verwendet, um den Datenaustausch und die Integration zwischen verschiedenen Plattformen zu ermöglichen. REST-APIs geben in der Regel Daten im JSON-Format (JavaScript Object Notation) zurück, was leicht und einfach zu analysieren ist.

In C# können Sie die HttpClient Klasse verwenden, um HTTP-Anforderungen an Webressourcen zu senden.

Verwenden von HttpClient für asynchrone API-Aufrufe

Die HttpClient Klasse ist Teil des System.Net.Http Namespace, der Klassen zum Senden von HTTP-Anforderungen und empfangen von HTTP-Antworten bereitstellt. Die HttpClient Klasse ist so konzipiert, dass sie asynchron verwendet wird, sodass Sie nicht blockierte Aufrufe an Webressourcen ausführen können.

Die HTTPClient Klasse enthält die folgenden asynchronen Methoden:

  • GetAsync: Sendet eine GET-Anforderung an den angegebenen URI und gibt die Antwort zurück.
  • PostAsync: Sendet eine POST-Anforderung an den angegebenen URI mit dem angegebenen Inhalt und gibt die Antwort zurück.
  • PutAsync: Sendet eine PUT-Anforderung an den angegebenen URI mit dem angegebenen Inhalt und gibt die Antwort zurück.
  • DeleteAsync: Sendet eine DELETE-Anforderung an den angegebenen URI und gibt die Antwort zurück.
  • SendAsync: Sendet eine HTTP-Anforderungsnachricht und gibt die Antwort zurück.

Im folgenden Codebeispiel wird veranschaulicht, wie die HttpClient Klasse verwendet wird, um eine asynchrone GET-Anforderung an eine REST-API zu senden und die Antwort zu verarbeiten:


// Code that demonstrates the use of asynchronous REST API calls in C#

using System;
using System.ComponentModel;
using System.Net.Http;
using System.Threading.Tasks;
using System.Text.Json;

namespace ConsoleApp
{
    class Program
    {
        static async Task Main(string[] args)
        {
            using (HttpClient client = new HttpClient())
            {
                try
                {
                    // PetStore API endpoint
                    string url = "https://petstore.swagger.io/v2/pet/findByStatus?status=available";
                    HttpResponseMessage response = await client.GetAsync(url);
                    response.EnsureSuccessStatusCode();
                    string responseBody = await response.Content.ReadAsStringAsync();
                    //Console.WriteLine($"Response: {responseBody}");

                    // Deserialize the JSON response into a list of pets
                    var pets = JsonSerializer.Deserialize<List<Pet>>(responseBody);

                    // Iterate through the list of pets and display their details
                    foreach (var pet in pets)
                    {
                        //Console.WriteLine($"Pet ID: {pet.id}, Name: {pet.name}");
                        if (pet.id.ToString().Length > 4)
                        {
                            Console.WriteLine($"Pet ID: {pet.id}, Name: {pet.name}");
                        }
                    }
                }
                catch (HttpRequestException e)
                {
                    Console.WriteLine($"Request error: {e.Message}");
                }
            }
        }
    }
}
public class Pet
{
    public long id { get; set; }
    public string name { get; set; }
    public Category category { get; set; }
    public List<string> photoUrls { get; set; }
    public List<Tag> tags { get; set; }
    public string status { get; set; }
}

public class Category
{
    public long id { get; set; }
    public string name { get; set; }
}

public class Tag
{
    public long id { get; set; }
    public string name { get; set; }
} 

In diesem Beispiel wird die HttpClient Klasse verwendet, um eine asynchrone GET-Anforderung an die PetStore-API zu senden. Die Antwort wird als Zeichenfolge gelesen und in eine Liste von Pet Objekten mithilfe der JsonSerializer Klasse deserialisiert. Der Code durchläuft dann die Liste der Haustiere und zeigt ihre Details an. Die using Anweisung stellt sicher, dass die HttpClient Instanz nach der Verwendung ordnungsgemäß verworfen wird und alle darin enthaltenen Ressourcen freigegeben werden.

Die HttpClient-Klasse ist so konzipiert, dass sie für mehrere Anforderungen wiederverwendet werden kann. Es wird empfohlen, eine einzelne Instanz von HttpClient zu erstellen und sie in der gesamten Anwendung zu verwenden. Dadurch können Sie die Leistung und ressourcenverwaltung verbessern, indem sie die zugrunde liegenden Netzwerkverbindungen wiederverwenden.

Zusammenfassung

In dieser Lektion haben Sie erfahren, wie Sie asynchron mithilfe der HttpClient Klasse auf Webressourcen zugreifen. Außerdem haben Sie erfahren, wie Sie asynchrone API-Aufrufe ausführen, um Daten aus einer REST-API abzurufen und die Antwort zu verarbeiten. Mithilfe asynchroner Programmiertechniken können Sie die Reaktionsfähigkeit Ihrer Anwendungen verbessern und eine bessere Benutzererfahrung bieten.

Wichtige Punkte

  • Auf Webressourcen kann asynchron zugegriffen werden, um das Blockieren des UI-Threads zu vermeiden.
  • REST-APIs bieten eine standardisierte Methode für die Interaktion mit Webdiensten.
  • Die HttpClient Klasse in C# wurde für die asynchrone Verwendung entwickelt, sodass nicht blockierte Aufrufe an Webressourcen zugelassen werden.
  • Die HttpClient Klasse enthält asynchrone Methoden wie GetAsync, , PostAsync, PutAsync, , DeleteAsyncund SendAsync.
  • Eine einzelne Instanz von HttpClient sollte für mehrere Anforderungen wiederverwendet werden, um die Leistung und Ressourcenverwaltung zu verbessern.