Обработчик сообщений для фильтрации сетевых запросов – C#
Использование обработчиков сообщений – типичная практика разработки программного обеспечения. Обработчики сообщений используются для перехвата и обработки сообщений в конвейерном режиме. В этой статье мы создадим собственные обработчики сообщений, которые фильтруют сетевые запросы и отключают нежелательные. Вы найдете простые примеры C# того, как применять обработчики сообщений для сетевых операций.
Сетевые запросы – Network Requests
В разработке программного обеспечения сетевые запросы относятся к клиентскому приложению, отправляющему запрос серверу по сети и получающему ответ от сервера. Обработчики сообщений – это мощный способ перехвата и обработки сетевых запросов и ответов.
Обработчик сообщений для фильтрации сетевых запросов
Библиотека Aspose.HTML for .NET предоставляет функциональные возможности, которые могут быть полезны в сценариях, когда вы хотите ограничить определенные типы сетевых запросов в приложении обработки HTML. Например, если вы работаете с HTML-документами и хотите, чтобы из внешних источников загружались только определенные типы ресурсов. Для этого следует создать обработчик сообщений, который будет отфильтровать нежелательные сетевые запросы, например, исключить файлы и данные в кодировке Base64.
Давайте рассмотрим фрагмент кода C#, который использует библиотеку Aspose.HTML для работы с HTML-документами и сетевыми операциями. Этот код устанавливает NetworkDisabledMessageHandler
, который отфильтровывает сетевые запросы с протоколами «file:» или «base64:» и пропускает другие запросы.
1using System;
2using Aspose.Html.Net;
3...
4
5 // Define the NetworkDisabledMessageHandler class that is derived from the MessageHandler class
6 public class NetworkDisabledMessageHandler : MessageHandler
7 {
8 // Override the Invoke() method
9 public override void Invoke(INetworkOperationContext context)
10 {
11 if (context.Request.RequestUri.Protocol == "file:" || context.Request.RequestUri.Protocol == "base64:")
12 Next(context);
13 }
14 }
Приведенный выше фрагмент кода C# создает обработчик сообщений для настройки поведения сетевых запросов на основе их протоколов:
- Используйте необходимое пространство имен, то есть Aspose.Html.Net.
- Определите собственный класс
NetworkDisabledMessageHandler
, который наследует класс MessageHandler. - Переопределите метод Invoke() для обработки сетевых операций. Вы можете настроить логику внутри метода Invoke() для обработки сетевых запросов в соответствии с вашими конкретными требованиями. Используйте свойство RequestUri класса RequestMessage и свойство Protocol, чтобы проверить, является ли протокол запроса «file:» или «base64:». Если это так, код не обрабатывает запрос дальше; в противном случае он вызывает метод Next(), позволяя запросу пройти через цепочку обработчиков сообщений.
Как отфильтровать нежелательные сетевые запросы
Вот пример того, как вы можете использовать класс NetworkDisabledMessageHandler
для фильтрации нежелательных сетевых запросов с помощью библиотеки Aspose.HTML:
- Создайте экземпляр класса Configuration с помощью конструктора Configuration().
- Вызовите метод GetService<INetworkService>() объекта конфигурации, чтобы получить экземпляр интерфейса INetworkService.
- Используйте метод Insert(), чтобы добавить обработчик сообщения в начало существующей цепочки обработчиков сообщений. Это означает, что любые сетевые запросы, сделанные через INetworkService, сначала будут проходить через
NetworkDisabledMessageHandler
. - Создайте экземпляр класса HTMLDocument, передав ему путь к HTML-файлу и объект конфигурации.
1using Aspose.Html;
2using Aspose.Html.Net;
3using Aspose.Html.Services;
4using System.IO;
5...
6
7 // Create an instance of the Configuration class
8 using var configuration = new Configuration();
9
10 // Call the INetworkService which contains the functionality for managing network operations
11 var network = configuration.GetService<INetworkService>();
12
13 // Add the TimeoutMessageHandler to the top of existing message handler chain
14 network.MessageHandlers.Insert(0, new NetworkDisabledMessageHandler());
15
16 // Prepare path to a source document file
17 string documentPath = Path.Combine(DataDir, "document.html");
18
19 // Create an HTML document with a custom configuration
20 using var document = new HTMLDocument(documentPath, configuration);
Обработчик сообщений для блокировки внешних сетевых запросов
В следующем примере C# создается NetworkChangeMessageHandler
, который блокирует все внешние сетевые запросы и меняет их URL-адреса на локальные. Этот обработчик сообщений можно использовать при тестировании среды разработки или в сценариях, когда определенные типы внешних ресурсов необходимо заблокировать или перенаправить в целях безопасности и т. д.
1using System;
2using Aspose.Html.Net;
3...
4
5 // Define the NetworkChangeMessageHandler class that is derived from the MessageHandler class
6 public class NetworkChangeMessageHandler : MessageHandler
7 {
8 // Override the Invoke() method
9 public override void Invoke(INetworkOperationContext context)
10 {
11 if (context.Request.RequestUri.Protocol == "file:" || context.Request.RequestUri.Protocol == "base64:")
12 {
13 Next(context);
14 return;
15 }
16
17 context.Request.RequestUri = new Url(context.Request.RequestUri.Pathname, "http://localhost:8080");
18 }
19 }
Созданный класс NetworkChangeMessageHandler
представляет собой собственный обработчик сообщений, который перехватывает сетевые запросы и изменяет URI запроса на основе определенных условий:
- обработчик сообщений перенаправляет запросы с протоколами «file:» или «base64:» следующему обработчику в цепочке без изменений.
- обработчик сообщений изменяет URL-адрес запроса для других сетевых запросов, чтобы перенаправить их на другой сервер. В этом случае он меняет хост на http://localhost:8080.
По сути, это использование обработчика сообщений для обеспечения работы в изолированных средах и блокировки внешних сетевых запросов, поскольку обработчик пропускает только локальные ресурсы, такие как файлы и данные в кодировке Base64, а все внешние URL-адреса меняет на локальные.
1using Aspose.Html;
2using Aspose.Html.Net;
3using Aspose.Html.Services;
4using System.IO;
5...
6
7 // Create an instance of the Configuration class
8 using var configuration = new Configuration();
9
10 // Call the INetworkService which contains the functionality for managing network operations
11 var network = configuration.GetService<INetworkService>();
12
13 // Add the CustomNetworkMessageHandler to the top of existing message handler chain
14 network.MessageHandlers.Insert(0, new NetworkChangeMessageHandler());
15
16 // Create an HTML document with a custom configuration
17 using var document = new HTMLDocument("https://products.aspose.com/html/", configuration);
Когда HTMLDocument создается с использованием объекта Configuration класса, любые сетевые запросы, сделанные к экземпляру HTMLDocument, сначала будут проходить через NetworkChangeMessageHandler
. Обработчик сообщений меняет URL-адрес и перенаправляет внешние сетевые запросы на «localhost».
Вы можете скачать полные примеры и файлы данных с GitHub..