Version 4 (V4) von SDK for .NET ist in der Vorschauversion! Informationen zu dieser neuen Version in der Vorschauversion finden Sie im Entwicklerhandbuch AWS SDK for .NET (Vorschauversion von Version 4).
Bitte beachten Sie, dass sich Version 4 des SDK in der Vorschauversion befindet und sich sein Inhalt daher ändern kann.
Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Paginatoren
Einige AWS Dienste sammeln und speichern eine große Datenmenge, die Sie mithilfe der API-Aufrufe von abrufen können. SDK for .NET Wenn die Datenmenge, die Sie abrufen möchten, für einen einzelnen API-Aufruf zu groß wird, können Sie die Ergebnisse mithilfe der Paginierung in überschaubarere Teile aufteilen.
Damit Sie die Paginierung durchführen können, stellen die Anforderungs- und Antwortobjekte für viele Service-Clients im SDK ein Fortsetzungstoken (normalerweise benannt) bereit. NextToken
Einige dieser Service-Clients bieten auch Paginatoren.
Mit Paginatoren können Sie den Mehraufwand vermeiden, der mit dem Fortsetzungstoken verbunden ist, der Schleifen, Statusvariablen, mehrere API-Aufrufe usw. beinhalten kann. Wenn Sie einen Paginator verwenden, können Sie Daten aus einem AWS Dienst über eine einzige Codezeile, die Deklaration einer Schleife, abrufen. foreach
Wenn mehrere API-Aufrufe erforderlich sind, um die Daten abzurufen, erledigt der Paginator dies für Sie.
Wo finde ich Paginatoren?
Nicht alle Dienste bieten Paginatoren. Eine Möglichkeit, festzustellen, ob ein Dienst einen Paginator für eine bestimmte API bereitstellt, besteht darin, sich die Definition einer Service-Client-Klasse in der API-Referenz anzusehen.AWS SDK for .NET
Wenn Sie beispielsweise die Definition für die AmazonCloudWatchLogsClientKlasse untersuchen, sehen Sie eine Paginators
Eigenschaft. Dies ist die Eigenschaft, die einen Paginator für Amazon CloudWatch Logs bereitstellt.
Was geben mir Paginatoren?
Paginatoren enthalten Eigenschaften, die es Ihnen ermöglichen, vollständige Antworten zu sehen. Sie enthalten in der Regel auch eine oder mehrere Eigenschaften, die es Ihnen ermöglichen, auf die interessantesten Teile der Antworten zuzugreifen, die wir die wichtigsten Ergebnisse nennen werden.
In den zuvor AmazonCloudWatchLogsClient
genannten Fällen enthält das Paginator
Objekt beispielsweise eine Responses
Eigenschaft mit dem vollständigen DescribeLogGroupsResponseObjekt aus dem API-Aufruf. Diese Responses
Eigenschaft enthält unter anderem eine Sammlung der Protokollgruppen.
Das Paginator-Objekt enthält auch ein wichtiges Ergebnis mit dem Namen. LogGroups
Diese Eigenschaft enthält nur den Teil der Antwort mit den Protokollgruppen. Dieses wichtige Ergebnis ermöglicht es Ihnen, Ihren Code unter vielen Umständen zu reduzieren und zu vereinfachen.
Synchrone und asynchrone Paginierung
Paginatoren bieten sowohl synchrone als auch asynchrone Mechanismen für die Paginierung. Synchrone Paginierung ist in Projekten von.NET Framework 4.7.2 (oder höher) verfügbar. Asynchrone Paginierung ist in .NET Core-Projekten (.NET Core 3.1, .NET 5 usw.) verfügbar.
Da asynchrone Operationen und .NET Core empfohlen werden, zeigt Ihnen das folgende Beispiel die asynchrone Paginierung. Informationen dazu, wie Sie dieselben Aufgaben mit synchroner Paginierung und .NET Framework 4.7.2 (oder höher) ausführen können, finden Sie nach dem Beispiel unter. Zusätzliche Überlegungen zu Paginatoren
Beispiel
Das folgende Beispiel zeigt Ihnen, wie Sie mit dem SDK for .NET eine Liste von Protokollgruppen anzeigen können. Im Gegensatz dazu zeigt das Beispiel, wie Sie dies sowohl mit als auch ohne Paginatoren tun können. Bevor Sie sich den vollständigen Code ansehen, der später gezeigt wird, sollten Sie sich die folgenden Ausschnitte ansehen.
CloudWatch Loggruppen ohne Paginatoren abrufen
// Loop as many times as needed to get all the log groups
var request = new DescribeLogGroupsRequest{Limit = LogGroupLimit};
do
{
Console.WriteLine($"Getting up to {LogGroupLimit} log groups...");
var response = await cwClient.DescribeLogGroupsAsync(request);
foreach(var logGroup in response.LogGroups)
{
Console.WriteLine($"{logGroup.LogGroupName}");
}
request.NextToken = response.NextToken;
} while(!string.IsNullOrEmpty(request.NextToken));
Abrufen von CloudWatch Protokollgruppen mithilfe von Paginatoren
// No need to loop to get all the log groups--the SDK does it for us behind the scenes
var paginatorForLogGroups =
cwClient.Paginators.DescribeLogGroups(new DescribeLogGroupsRequest());
await foreach(var logGroup in paginatorForLogGroups.LogGroups)
{
Console.WriteLine(logGroup.LogGroupName);
}
Die Ergebnisse dieser beiden Snippets sind exakt identisch, sodass der Vorteil der Verwendung von Paginatoren deutlich zu erkennen ist.
Anmerkung
Bevor Sie versuchen, den vollständigen Code zu erstellen und auszuführen, stellen Sie sicher, dass Sie Ihre Umgebung und Ihr Projekt eingerichtet haben.
Möglicherweise benötigen Sie auch die Microsoft.Bcl. AsyncInterfacesIAsyncEnumerable
Vollständiger Code
Dieser Abschnitt enthält relevante Referenzen und den vollständigen Code für dieses Beispiel.
NuGet Pakete:
Elemente der Programmierung:
-
Namespace Amazon. CloudWatch
Klasse AmazonCloudWatchLogsClient
-
Namespace Amazon. CloudWatchLogs.Modell
Klasse DescribeLogGroupsRequest
Klasse DescribeLogGroupsResponse
Klasse LogGroup
using System;
using System.Threading.Tasks;
using Amazon.CloudWatchLogs;
using Amazon.CloudWatchLogs.Model;
namespace CWGetLogGroups
{
class Program
{
// A small limit for demonstration purposes
private const int LogGroupLimit = 3;
//
// Main method
static async Task Main(string[] args)
{
var cwClient = new AmazonCloudWatchLogsClient();
await DisplayLogGroupsWithoutPaginators(cwClient);
await DisplayLogGroupsWithPaginators(cwClient);
}
//
// Method to get CloudWatch log groups without paginators
private static async Task DisplayLogGroupsWithoutPaginators(IAmazonCloudWatchLogs cwClient)
{
Console.WriteLine("\nGetting list of CloudWatch log groups without using paginators...");
Console.WriteLine("------------------------------------------------------------------");
// Loop as many times as needed to get all the log groups
var request = new DescribeLogGroupsRequest{Limit = LogGroupLimit};
do
{
Console.WriteLine($"Getting up to {LogGroupLimit} log groups...");
DescribeLogGroupsResponse response = await cwClient.DescribeLogGroupsAsync(request);
foreach(LogGroup logGroup in response.LogGroups)
{
Console.WriteLine($"{logGroup.LogGroupName}");
}
request.NextToken = response.NextToken;
} while(!string.IsNullOrEmpty(request.NextToken));
}
//
// Method to get CloudWatch log groups by using paginators
private static async Task DisplayLogGroupsWithPaginators(IAmazonCloudWatchLogs cwClient)
{
Console.WriteLine("\nGetting list of CloudWatch log groups by using paginators...");
Console.WriteLine("-------------------------------------------------------------");
// Access the key results; i.e., the log groups
// No need to loop to get all the log groups--the SDK does it for us behind the scenes
Console.WriteLine("\nFrom the key results...");
Console.WriteLine("------------------------");
IDescribeLogGroupsPaginator paginatorForLogGroups =
cwClient.Paginators.DescribeLogGroups(new DescribeLogGroupsRequest());
await foreach(LogGroup logGroup in paginatorForLogGroups.LogGroups)
{
Console.WriteLine(logGroup.LogGroupName);
}
// Access the full response
// Create a new paginator, do NOT reuse the one from above
Console.WriteLine("\nFrom the full response...");
Console.WriteLine("--------------------------");
IDescribeLogGroupsPaginator paginatorForResponses =
cwClient.Paginators.DescribeLogGroups(new DescribeLogGroupsRequest());
await foreach(DescribeLogGroupsResponse response in paginatorForResponses.Responses)
{
Console.WriteLine($"Content length: {response.ContentLength}");
Console.WriteLine($"HTTP result: {response.HttpStatusCode}");
Console.WriteLine($"Metadata: {response.ResponseMetadata}");
Console.WriteLine("Log groups:");
foreach(LogGroup logGroup in response.LogGroups)
{
Console.WriteLine($"\t{logGroup.LogGroupName}");
}
}
}
}
}
Zusätzliche Überlegungen zu Paginatoren
-
Paginatoren können nicht mehr als einmal verwendet werden
Wenn Sie die Ergebnisse eines bestimmten AWS Paginators an mehreren Stellen in Ihrem Code benötigen, dürfen Sie ein Paginator-Objekt nicht mehr als einmal verwenden. Erstellen Sie stattdessen jedes Mal, wenn Sie ihn benötigen, einen neuen Paginator. Dieses Konzept wird im vorherigen Beispielcode der Methode gezeigt.
DisplayLogGroupsWithPaginators
-
Synchrone Paginierung
Synchrone Paginierung ist für Projekte von.NET Framework 4.7.2 (oder höher) verfügbar.
Warnung
Ab dem 15. August 2024 SDK for .NET wird der Support für .NET Framework 3.5 eingestellt und die Mindestversion von .NET Framework auf 4.7.2 geändert. Weitere Informationen finden Sie im Blogbeitrag Wichtige Änderungen für die Ziele .NET Framework 3.5 und 4.5 von
. SDK for .NET Um dies zu sehen, erstellen Sie ein.NET Framework 4.7.2 (oder höher) -Projekt und kopieren Sie den vorherigen Code in dieses Projekt. Entfernen Sie dann einfach das
await
Schlüsselwort aus den beidenforeach
Paginator-Aufrufen, wie im folgenden Beispiel gezeigt./*await*/ foreach(var logGroup in paginatorForLogGroups.LogGroups) { Console.WriteLine(logGroup.LogGroupName); }
Erstellen Sie das Projekt und führen Sie es aus, um dieselben Ergebnisse zu erzielen wie bei der asynchronen Paginierung.