Message Handler zum Filtern von Netzwerkanfragen – C# Beispiele
Die Verwendung von Message-Handlern ist ein typisches Muster in der Softwareentwicklung. Message-Handler werden verwendet, um Nachrichten abzufangen und in einer Pipeline zu verarbeiten. In diesem Artikel werden wir benutzerdefinierte Message-Handler erstellen, die Netzwerkanforderungen filtern und unerwünschte deaktivieren. Sie finden einfache C#-Beispiele für die Anwendung von Message-Handlern für Netzwerkoperationen.
Netzwerk-Anfragen
In der Softwaretechnik beziehen sich Netzwerkanfragen auf eine Client-Anwendung, die eine Anfrage über das Netzwerk an einen Server sendet und eine Antwort vom Server erhält. Message-Handler sind eine leistungsfähige Methode, um diese Netzwerkanfragen und -antworten abzufangen und zu verarbeiten.
In diesem Artikel werden Beispiele für das Abfangen von Anfragen, das Blockieren einiger unerwünschter Netzwerkanfragen oder das Ersetzen der URLs durch einen anderen Wert behandelt.
Message Handler zum Filtern von Netzwerkanfragen
Die Aspose.HTML for .NET-Bibliothek bietet Funktionen, die in Szenarien nützlich sein können, in denen Sie bestimmte Arten von Netzwerkanforderungen in einer HTML-Verarbeitungsanwendung einschränken möchten. Zum Beispiel, wenn Sie mit HTML-Dokumenten arbeiten und sicherstellen wollen, dass nur bestimmte Arten von Ressourcen aus externen Quellen geladen werden. Dieser Code bietet eine Möglichkeit, unerwünschte Netzwerkanfragen herauszufiltern. Er richtet einen NetworkDisabledMessageHandler
ein, der nur Anfragen mit den Protokollen “file:”, “about:” oder “base64:” zulässt. Wenn die Anfrage ein anderes Protokoll verwendet, blockiert der Handler sie.
1// Disable external network access while allowing local and embedded resources
2
3// Define the NetworkDisabledMessageHandler class that is derived from the MessageHandler class
4public class NetworkDisabledMessageHandler : MessageHandler
5{
6 // Override the Invoke() method
7 public override void Invoke(INetworkOperationContext context)
8 {
9 if (context.Request.RequestUri.Protocol == "file:" ||
10 context.Request.RequestUri.Protocol == "base64:" ||
11 context.Request.RequestUri.Protocol == "about:")
12 Next(context);
13 }
14}
Der obige C#-Codeausschnitt erstellt einen Message-Handler, um das Verhalten von Netzwerkanfragen basierend auf ihren Protokollen anzupassen:
- Verwenden Sie den erforderlichen Namespace, d. h. Aspose.Html.Net.
- Definieren Sie eine eigene Klasse
NetworkDisabledMessageHandler
. Diese Klasse erbt von der Klasse MessageHandler und überschreibt deren Invoke() Methode, um Netzwerkoperationen zu behandeln. - Sie können die Logik innerhalb der Invoke()-Methode anpassen, um Netzwerkanforderungen entsprechend Ihren spezifischen Anforderungen zu behandeln. Verwenden Sie die Eigenschaft RequestUri der Klasse RequestMessage und die Eigenschaft Protocol, um zu prüfen, ob das Anfrageprotokoll “file:”, “base64:” oder “about:” lautet. Ist dies der Fall, verarbeitet der Code die Anfrage weiter; andernfalls werden die Anfragen automatisch blockiert.
Dieser benutzerdefinierte Message-Handler kann Netzwerkanfragen in Ihrem .NET-Projekt oder Ihrer Anwendung herausfiltern.
So filtern Sie unerwünschte Netzwerkanfragen heraus
Hier ein Beispiel, wie Sie die Klasse NetworkDisabledMessageHandler
verwenden können, um unerwünschte Netzwerkanfragen mit Hilfe der Aspose.HTML-Bibliothek herauszufiltern:
- Erstellen Sie eine Instanz der Klasse Konfiguration mit dem Konstruktor Konfiguration().
- Rufen Sie die Methode GetService<INetworkService>() für das Konfigurationsobjekt auf, um eine Instanz der Schnittstelle INetworkService zu erhalten.
- Verwenden Sie die Insert()-Methode, um den Message-Handler an die Spitze der bestehenden Message-Handler-Kette zu setzen. Das bedeutet, dass alle Netzwerkanfragen, die über INetworkService gestellt werden, zuerst
NetworkDisabledMessageHandler
durchlaufen. - Erstellen Sie eine Instanz der Klasse HTMLDocument und übergeben Sie ihr den Pfad zur HTML-Datei und das Konfigurationsobjekt.
1// Disable network requests when loading HTML
2
3// Create an instance of the Configuration class
4using Configuration configuration = new Configuration();
5
6// Call the INetworkService which contains the functionality for managing network operations
7INetworkService network = configuration.GetService<INetworkService>();
8
9// Add the TimeoutMessageHandler to the top of existing message handler chain
10network.MessageHandlers.Insert(0, new NetworkDisabledMessageHandler());
11
12// Prepare path to a source document file
13string documentPath = Path.Combine(DataDir, "document.html");
14
15// Create an HTML document with a custom configuration
16using HTMLDocument document = new HTMLDocument(documentPath, configuration);
Sie können die vollständigen Beispiele und Datendateien von GitHub herunterladen.