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 может иметь другую цепочку фильтров или конвейер.
Чтобы написать пользовательский фильтр, приложение реализует пользовательскую версию интерфейса 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);
}