Поделиться через


Windows.Web.Http.Filters Пространство имен

Предоставляет классы для отправки HTTP-запросов и интерфейс для создания фильтров для целевых служб HTTP и REST в приложении UWP.

Классы

HttpBaseProtocolFilter

Базовый фильтр протокола для экземпляра HttpClient .

HttpCacheControl

Обеспечивает управление локальным кэшем HTTP для ответов на HTTP-запросы методами в пространствах имен Windows.Web.Http и Windows.Web.Http.Filters .

HttpServerCustomValidationRequestedEventArgs

Предоставляет данные для события ServerCustomValidationRequested .

Интерфейсы

IHttpFilter

Интерфейс, используемый для реализации пользовательских фильтров для экземпляра HttpClient .

Перечисления

HttpCacheReadBehavior

Указывает, используются ли запросы на чтение с помощью методов класса в пространствах имен Windows.Web.Http и Windows.Web.Http.Filters локальный кэш HTTP для ответа.

HttpCacheWriteBehavior

Указывает, записывается ли содержимое, возвращаемое запросами, используемыми методами класса в пространствах имен Windows.Web.Http и Windows.Web.Http.Filters , в локальный кэш HTTP.

HttpCookieUsageBehavior

Определяет поведение использования файлов cookie, которое используется в свойстве CookieUsageBehavior .

Комментарии

Пространство имен Windows.Web.Http и связанные пространства имен Windows.Web.Http.Headers и Windows.Web.Http.Filters предоставляют программный интерфейс HTTP для приложения UWP, которое хочет подключиться к службам HTTP. API HTTP обеспечивает согласованную поддержку javaScript, C#, VB.NET и C++ для разработчиков. API также поддерживает добавление настраиваемых фильтров для запросов и ответов. Фильтры могут упростить обработку более сложных сетевых проблем. API также позволяет элементу управления приложениями выполнять кэширование чтения и записи.

Классы в пространстве имен Windows.Web.Http поддерживают использование фильтров на основе классов в пространстве имен Windows.Web.Http.Filters. Классы в пространстве имен Windows.Web.Http.Filters также позволяют элементу управления приложениями выполнять кэширование чтения и записи на клиенте. HttpCacheDirectiveHeaderValueCollection в Windows.Web.Http.Headers предоставляет контейнер коллекции для экземпляров директив кэша в заголовке HTTP Cache-Control для содержимого HTTP, связанного с HTTP-запросом или ответом. Заголовок Cache-Control позволяет приложению иметь больший контроль над поведением кэширования.

Классы в пространстве имен Windows.Web.Http.Headers представляют заголовки HTTP, как определено в RFC 2616 в IETF.

Класс HttpClient в пространстве имен Windows.Web.Http предоставляет базовый класс для отправки HTTP-запросов и получения ответов HTTP. Фильтры предоставляют механизм обработчика для решения распространенных проблем со службой HTTP. Простые фильтры можно объединять в цепочку в последовательности для решения более сложных проблем со службой HTTP.

Фильтр HTTP — это черный ящик, который принимает сообщение HTTP-запроса и создает ответное сообщение HTTP. То, как фильтр получает HTTP-ответ, определяется разработчиком фильтра. Фильтры обычно добавляют или изменяют заголовки, обрабатывают авторизацию (возможно, с помощью WebAuthenticationBroker), разрешают или запрещают запрос на основе условий сети. Фильтры обычно вносят изменения, а затем передают запрос внутреннему фильтру, который обычно устанавливается при создании фильтра.

Такой подход позволяет фильтру отвечать только за определенный аспект выполнения HTTP-запроса и делегировать другие аспекты другим фильтрам. Фильтр может реализовывать кэширование, проверку подлинности, перенаправления, файлы cookie, фактическое взаимодействие с сервером или их сочетание. Самый нижний (базовый) фильтр, как правило, является фильтром, который выполняет фактическое взаимодействие с сетью.

Многие приложения, использующие ПРОТОКОЛ HTTP для доступа к сети, часто должны реагировать на различные условия. Ниже приведены некоторые распространенные примеры.

  • Повторная попытка в сети (с откатом).
  • Адаптация к лимитным сетям (например, если сетевое подключение находится в роуминге).
  • Проверка подлинности на сайтах социальных сетей.
  • Ведение журнала и телеметрия.

Устранить любые из этих сетевых проблем самостоятельно несложно. Это становится сложной проблемой, если некоторые из этих вопросов объединяются. Поддержка пользовательских фильтров в пространстве имен Windows.Web.Http.Filters позволяет разработчикам создавать модульный код для простых фильтров. Ряд простых фильтров можно связать с цепочкой фильтров для обработки сложных сочетаний проблем. Разработчик выбирает все, что касается цепочки фильтров:

  • Добавляемый фильтр.
  • Порядок их размещения в цепочке фильтров.

HttpClient — это класс main, используемый для отправки и получения запросов по протоколу HTTP. HttpBaseProtocolFilter — это то, что HttpClient использует для отправки и получения данных. Таким образом , HttpBaseProtocolFilter обычно является нижней частью любой настраиваемой цепочки фильтров. HttpBaseProtocolFilter также можно использовать для управления кэшированием и другим поведением HTTP-подключения. Каждый экземпляр HttpClient может иметь другую цепочку фильтров или конвейер.

Рисование цепочки фильтров HTTP

Чтобы написать пользовательский фильтр, приложение реализует пользовательскую версию интерфейса IHttpFilter . Код для реализации поведения фильтра находится в методе IHttpFilter.SendRequestAsync . Фильтры могут быть написаны на C#/VB.NET или C++. Фильтры можно вызывать и использовать на любом языке, поддерживаемом для приложения UWP, включая JavaScript.

В примере кода показан фильтр для добавления пользовательского заголовка в HTTP-запросы и ответы.

public class PlugInFilter : IHttpFilter {
    private IHttpFilter innerFilter;

    public PlugInFilter(IHttpFilter innerFilter) {
        if (innerFilter == null) {
            throw new ArgumentException("innerFilter cannot be null.");
        }
        this.innerFilter = innerFilter;
    }

    public IAsyncOperationWithProgress<HttpResponseMessage, HttpProgress> SendRequestAsync(HttpRequestMessage request) {
        return AsyncInfo.Run<HttpResponseMessage, HttpProgress>(async (cancellationToken, progress) =>
        {
            request.Headers.Add("Custom-Header", "CustomRequestValue");
            HttpResponseMessage response = await innerFilter.SendRequestAsync(request).AsTask(cancellationToken, progress);

            cancellationToken.ThrowIfCancellationRequested();

            response.Headers.Add("Custom-Header", "CustomResponseValue");
        return response;
        });
    }

    public void Dispose() {
        innerFilter.Dispose();
        GC.SuppressFinalize(this);
    }
}

Чтобы использовать фильтр, приложение использует конструктор HttpClient(IHttpFilter), передав интерфейс фильтра для использования для экземпляра HttpClient . Чтобы настроить цепочку фильтров, новый фильтр связывается с предыдущим фильтром и httpBaseProtocolFilter внизу.

В примере кода показано создание HttpClient для использования настраиваемого фильтра.

internal static void CreateHttpClient(ref HttpClient httpClient)
{
    if (httpClient != null) {
        httpClient.Dispose();
    }

    // HttpClient can be extended by plugging multiple filters together,
    // providing HttpClient with the configured filter pipeline.
    var baseFilter = new HttpBaseProtocolFilter();

    // Adds a custom header to every request and response message.
    var myFilter = new PlugInFilter(baseFilter);
    httpClient = new HttpClient(myFilter);

}

См. также раздел