Partilhar via


Windows.Web.Http.Filters Namespace

Fornece classes para enviar solicitações HTTP e uma interface para criar filtros para direcionar serviços HTTP e REST no aplicativo UWP.

Classes

HttpBaseProtocolFilter

O filtro de protocolo base para uma instância httpClient .

HttpCacheControl

Fornece controle do cache HTTP local para respostas a solicitações HTTP por métodos nos namespaces Windows.Web.Http e Windows.Web.Http.Filters .

HttpServerCustomValidationRequestedEventArgs

Fornece dados para o evento ServerCustomValidationRequested .

Interfaces

IHttpFilter

Uma interface usada para implementar filtros personalizados para uma instância httpClient .

Enumerações

HttpCacheReadBehavior

Indica se as solicitações de leitura por métodos de classe nos namespaces Windows.Web.Http e Windows.Web.Http.Filters usam o cache HTTP local para a resposta.

HttpCacheWriteBehavior

Indica se o conteúdo retornado por solicitações usadas por métodos de classe nos namespaces Windows.Web.Http e Windows.Web.Http.Filters é gravado no cache HTTP local.

HttpCookieUsageBehavior

Define o comportamento de uso de cookie usado na propriedade CookieUsageBehavior .

Comentários

O namespace Windows.Web.Http e os namespaces Windows.Web.Http.Headers e Windows.Web.Http.Filters relacionados fornecem uma interface de programação HTTP para o aplicativo UWP que deseja se conectar aos serviços HTTP. A API HTTP fornece suporte consistente em JavaScript, C#, VB.NET e C++ para desenvolvedores. A API também dá suporte à adição de filtros personalizados em solicitações e respostas. Os filtros podem simplificar o tratamento de problemas de rede mais complexos. A API também permite que um controle de aplicativo leia e escreva o comportamento de cache.

As classes no namespace Windows.Web.Http dão suporte ao uso de filtros com base nas classes no namespace Windows.Web.Http.Filters. As classes no namespace Windows.Web.Http.Filters também permitem que um aplicativo controle o comportamento de cache de leitura e gravação no cliente. O HttpCacheDirectiveHeaderValueCollection no Windows.Web.Http.Headers fornece um contêiner de coleção para instâncias das diretivas de cache no cabeçalho HTTP Cache-Control no conteúdo HTTP associado a uma solicitação OU resposta HTTP. O cabeçalho Cache-Control permite que um aplicativo tenha mais controle sobre o comportamento de cache.

As classes no namespace Windows.Web.Http.Headers representam cabeçalhos HTTP conforme definido no RFC 2616 pelo IETF.

A classe HttpClient no namespace Windows.Web.Http fornece uma classe base para enviar solicitações HTTP e receber respostas HTTP. Os filtros fornecem um mecanismo de manipulador para ajudar com problemas comuns de serviço HTTP. Filtros simples podem ser encadeados em uma sequência para lidar com problemas de serviço HTTP mais complexos.

Um filtro HTTP é uma caixa preta que recebe uma mensagem de solicitação HTTP e produz uma mensagem de resposta HTTP. Como o filtro obtém uma resposta HTTP é determinado pelo desenvolvedor do filtro. Os filtros geralmente adicionam ou alteram cabeçalhos, manipulam a autorização (possivelmente usando o WebAuthenticationBroker) ou permitem ou não uma solicitação com base nas condições de rede. Os filtros geralmente fazem alterações e passam a solicitação para um filtro interno, que normalmente é definido quando um filtro é construído.

Essa abordagem permite que um filtro seja responsável apenas por um aspecto específico de uma execução de solicitação HTTP e delegar outros aspectos a outros filtros. Um filtro pode implementar cache, autenticação, redirecionamentos, cookies, comunicação real com o servidor ou uma combinação deles. O filtro mais baixo (base) geralmente será aquele que faz a comunicação real com a rede.

Muitos aplicativos que usam HTTP para acesso à rede geralmente precisam responder a uma variedade de condições. Alguns exemplos comuns incluem:

  • Repetição de rede (com retirada).
  • Adaptando-se a redes limitadas (quando uma conexão de rede está em roaming, por exemplo).
  • Autenticação em sites de rede social.
  • Registro em log e telemetria.

Não é difícil lidar com nenhum desses problemas de rede sozinhos. Isso se torna um problema complexo quando vários desses problemas são combinados. O suporte para filtros personalizados no namespace Windows.Web.Http.Filters permite que os desenvolvedores criem código modular para filtros simples. Uma série de filtros simples pode ser vinculada a uma cadeia de filtros para lidar com combinações complexas de problemas. O desenvolvedor escolhe tudo sobre a cadeia de filtros:

  • Os filtros a serem adicionados.
  • A ordem para colocá-los na cadeia de filtros.

HttpClient é a classe main usada para enviar e receber solicitações por HTTP. HttpBaseProtocolFilter é o que HttpClient usa para enviar e receber dados. Portanto, HttpBaseProtocolFilter normalmente é a parte inferior de qualquer cadeia de filtros personalizada. HttpBaseProtocolFilter também pode ser usado para controlar o cache e outros comportamentos da conexão HTTP. Cada instância do HttpClient pode ter uma cadeia de filtros ou um pipeline diferente.

Desenho de uma cadeia de filtros HTTP

Para escrever um filtro personalizado, um aplicativo implementa uma versão personalizada da interface IHttpFilter . O código para implementar o comportamento do filtro está no método IHttpFilter.SendRequestAsync . Os filtros podem ser gravados em C#/VB.NET ou C++. Os filtros podem ser chamados e usados de qualquer linguagem com suporte para o aplicativo UWP, incluindo JavaScript.

O código de exemplo mostra um filtro para adicionar um cabeçalho personalizado a solicitações e respostas 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);
    }
}

Para usar um filtro, um aplicativo usa o construtor HttpClient (IHttpFilter) passando a interface do filtro a ser usado para a instância httpClient . Para configurar a cadeia de filtros, o novo filtro é vinculado a um filtro anterior e a HttpBaseProtocolFilter na parte inferior.

O código de exemplo mostra a criação de um HttpClient para usar um filtro personalizado.

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);

}

Confira também