Обработчик сообщений для фильтрации сетевых запросов – 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# создает обработчик сообщений для настройки поведения сетевых запросов на основе их протоколов:

Как отфильтровать нежелательные сетевые запросы

Вот пример того, как вы можете использовать класс NetworkDisabledMessageHandler для фильтрации нежелательных сетевых запросов с помощью библиотеки Aspose.HTML:

  1. Создайте экземпляр класса Configuration с помощью конструктора Configuration().
  2. Вызовите метод GetService<INetworkService>() объекта конфигурации, чтобы получить экземпляр интерфейса INetworkService.
  3. Используйте метод Insert(), чтобы добавить обработчик сообщения в начало существующей цепочки обработчиков сообщений. Это означает, что любые сетевые запросы, сделанные через INetworkService, сначала будут проходить через NetworkDisabledMessageHandler.
  4. Создайте экземпляр класса 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 запроса на основе определенных условий:

По сути, это использование обработчика сообщений для обеспечения работы в изолированных средах и блокировки внешних сетевых запросов, поскольку обработчик пропускает только локальные ресурсы, такие как файлы и данные в кодировке 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..

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.