Windows.Web.Http.Filters Espacio de nombres

Proporciona clases para enviar solicitudes HTTP y una interfaz para crear filtros para los servicios HTTP y REST de destino en la aplicación para UWP.

Clases

HttpBaseProtocolFilter

Filtro de protocolo base para una instancia httpClient .

HttpCacheControl

Proporciona control de la caché HTTP local para las respuestas a las solicitudes HTTP por métodos en los espacios de nombres Windows.Web.Http y Windows.Web.Http.Filters .

HttpServerCustomValidationRequestedEventArgs

Proporciona datos para el evento ServerCustomValidationRequested .

Interfaces

IHttpFilter

Interfaz que se usa para implementar filtros personalizados para una instancia de HttpClient .

Enumeraciones

HttpCacheReadBehavior

Indica si las solicitudes de lectura por métodos de clase en los espacios de nombres Windows.Web.Http y Windows.Web.Http.Filters usan la caché HTTP local para la respuesta.

HttpCacheWriteBehavior

Indica si el contenido devuelto por las solicitudes utilizadas por los métodos de clase en los espacios de nombres Windows.Web.Http y Windows.Web.Http.Filters se escriben en la caché HTTP local.

HttpCookieUsageBehavior

Define el comportamiento de uso de cookies que se usa en la propiedad CookieUsageBehavior .

Comentarios

El espacio de nombres Windows.Web.Http y los espacios de nombres Windows.Web.Http.Headers y Windows.Web.Http.Filters relacionados proporcionan una interfaz de programación HTTP para la aplicación para UWP que desea conectarse a servicios HTTP. La API HTTP proporciona compatibilidad coherente con JavaScript, C#, VB.NET y C++ para desarrolladores. La API también admite la adición de filtros personalizados en solicitudes y respuestas. Los filtros pueden simplificar el control de problemas de red más complejos. La API también permite que una aplicación controle el comportamiento de almacenamiento en caché de lectura y escritura.

Las clases del espacio de nombres Windows.Web.Http admiten el uso de filtros basados en las clases del espacio de nombres Windows.Web.Http.Filters. Las clases del espacio de nombres Windows.Web.Http.Filters también permiten que un control de aplicación lea y escriba el comportamiento del almacenamiento en caché en el cliente. HttpCacheDirectiveHeaderValueCollection de Windows.Web.Http.Headers proporciona un contenedor de colección para las instancias de las directivas de caché en el encabezado HTTP Cache-Control en el contenido HTTP asociado a una solicitud o respuesta HTTP. El encabezado Cache-Control permite que una aplicación tenga más control sobre el comportamiento del almacenamiento en caché.

Las clases del espacio de nombres Windows.Web.Http.Headers representan encabezados HTTP definidos en RFC 2616 por IETF.

La clase HttpClient del espacio de nombres Windows.Web.Http proporciona una clase base para enviar solicitudes HTTP y recibir respuestas HTTP. Los filtros proporcionan un mecanismo de controlador para ayudar con problemas comunes del servicio HTTP. Los filtros simples se pueden encadenar en una secuencia para controlar problemas de servicio HTTP más complejos.

Un filtro HTTP es un cuadro negro que toma un mensaje de solicitud HTTP y genera un mensaje de respuesta HTTP. La forma en que el filtro obtiene una respuesta HTTP viene determinada por el desarrollador de filtros. Los filtros suelen agregar o cambiar encabezados, controlar la autorización (posiblemente mediante WebAuthenticationBroker) o permitir o denegar una solicitud en función de las condiciones de red. Normalmente, los filtros realizan cambios y, a continuación, pasan la solicitud a un filtro interno, que normalmente se establece cuando se construye un filtro.

Este enfoque permite que un filtro solo sea responsable de un aspecto específico de la ejecución de una solicitud HTTP y delegue otros aspectos a otros filtros. Un filtro puede implementar el almacenamiento en caché, la autenticación, las redirecciones, las cookies, la comunicación real con el servidor o una combinación de estos. El filtro más abajo (base) suele ser el que realiza la comunicación real con la red.

Muchas aplicaciones que usan HTTP para el acceso a la red a menudo necesitan responder a una variedad de condiciones. Algunos ejemplos comunes son:

  • Reintento de red (con retroceso).
  • Adaptación a redes de uso medido (cuando una conexión de red es móvil, por ejemplo).
  • Autenticación en sitios de red social.
  • Registro y telemetría.

No es difícil controlar ninguno de estos problemas de red por sí mismos. Esto se convierte en un problema complejo cuando se combinan varios de estos problemas. La compatibilidad con filtros personalizados en el espacio de nombres Windows.Web.Http.Filters permite a los desarrolladores crear código modular para filtros simples. Una serie de filtros simples se puede vincular a una cadena de filtros para controlar combinaciones complejas de problemas. El desarrollador elige todo sobre la cadena de filtros:

  • Filtros que se van a agregar.
  • Orden para colocarlos en la cadena de filtro.

HttpClient es la clase principal que se usa para enviar y recibir solicitudes a través de HTTP. HttpBaseProtocolFilter es lo que HttpClient usa para enviar y recibir datos. Por lo tanto , HttpBaseProtocolFilter suele ser la parte inferior de cualquier cadena de filtro personalizada. HttpBaseProtocolFilter también se puede usar para controlar el almacenamiento en caché y otro comportamiento de la conexión HTTP. Cada instancia de HttpClient puede tener una canalización o una cadena de filtro diferentes.

Dibujo de una cadena de filtros HTTP

Para escribir un filtro personalizado, una aplicación implementa una versión personalizada de la interfaz IHttpFilter . El código para implementar el comportamiento del filtro se encuentra en el método IHttpFilter.SendRequestAsync . Los filtros se pueden escribir en C#/VB.NET o C++. Los filtros se pueden llamar y usar desde cualquier lenguaje compatible con la aplicación para UWP, incluido JavaScript.

El código de ejemplo muestra un filtro para agregar un encabezado personalizado a las solicitudes y respuestas 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 un filtro, una aplicación usa el constructor HttpClient(IHttpFilter) que pasa la interfaz del filtro que se va a usar para la instancia de HttpClient . Para configurar la cadena de filtros, el nuevo filtro está vinculado a un filtro anterior y a HttpBaseProtocolFilter en la parte inferior.

El código de ejemplo muestra cómo crear un HttpClient para usar un 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);

}

Consulte también