Windows.Web.Http.Filters Spazio dei nomi

Fornisce classi per inviare richieste HTTP e un'interfaccia per creare filtri per i servizi HTTP e REST di destinazione nell'app UWP.

Classi

HttpBaseProtocolFilter

Filtro del protocollo di base per un'istanza di HttpClient .

HttpCacheControl

Fornisce il controllo della cache HTTP locale per le risposte alle richieste HTTP in base ai metodi negli spazi dei nomi Windows.Web.Http e Windows.Web.Http.Filters .

HttpServerCustomValidationRequestedEventArgs

Fornisce dati per l'evento ServerCustomValidationRequested .

Interfacce

IHttpFilter

Interfaccia usata per implementare filtri personalizzati per un'istanza di HttpClient .

Enumerazioni

HttpCacheReadBehavior

Indica se le richieste di lettura in base ai metodi della classe nello spazio dei nomi Windows.Web.Http e Windows.Web.Http.Filters usano la cache HTTP locale per la risposta.

HttpCacheWriteBehavior

Indica se il contenuto restituito dalle richieste usate dai metodi di classe nello spazio dei nomi Windows.Web.Http e Windows.Web.Http.Filters viene scritto nella cache HTTP locale.

HttpCookieUsageBehavior

Definisce il comportamento di utilizzo dei cookie usato nella proprietà CookieUsageBehavior .

Commenti

Lo spazio dei nomi Windows.Web.Http e gli spazi dei nomi Windows.Web.Http.Headers e Windows.Web.Http.Filters forniscono un'interfaccia di programmazione HTTP per l'app UWP che desidera connettersi ai servizi HTTP. L'API HTTP offre supporto coerente in JavaScript, C#, VB.NET e C++ per sviluppatori. L'API supporta anche l'aggiunta di filtri personalizzati alle richieste e alle risposte. I filtri possono semplificare la gestione di problemi di rete più complessi. L'API consente anche a un controllo dell'app di leggere e scrivere il comportamento di memorizzazione nella cache.

Le classi nello spazio dei nomi Windows.Web.Http supportano l'uso di filtri in base alle classi nello spazio dei nomi Windows.Web.Http.Filters. Le classi nello spazio dei nomi Windows.Web.Http.Filters consentono anche a un controllo dell'app di leggere e scrivere il comportamento di memorizzazione nella cache nel client. HttpCacheDirectiveHeaderValueCollection in Windows.Web.Http.Headers fornisce un contenitore di raccolta per le istanze delle direttive della cache nell'intestazione HTTP di Controllo cache nel contenuto HTTP associato a una richiesta o una risposta HTTP. L'intestazione Cache-Control consente a un'app di avere più controllo sul comportamento della memorizzazione nella cache.

Le classi nello spazio dei nomi Windows.Web.Http.Headers rappresentano intestazioni HTTP definite in RFC 2616 da IETF.

La classe HttpClient nello spazio dei nomi Windows.Web.Http fornisce una classe di base per l'invio di richieste HTTP e la ricezione di risposte HTTP. I filtri forniscono un meccanismo del gestore che consente di risolvere i problemi comuni del servizio HTTP. I filtri semplici possono essere concatenati in una sequenza per gestire problemi di servizio HTTP più complessi.

Un filtro HTTP è una casella nera che accetta un messaggio di richiesta HTTP e genera un messaggio di risposta HTTP. Il modo in cui il filtro ottiene una risposta HTTP è determinata dallo sviluppatore di filtri. I filtri in genere aggiungono o modificano le intestazioni, gestiscono l'autorizzazione (possibilmente usando WebAuthenticationBroker) o consentono o non consentono una richiesta in base alle condizioni di rete. I filtri in genere apportano modifiche e quindi passano la richiesta a un filtro interno, che viene in genere impostato quando viene costruito un filtro.

Questo approccio consente a un filtro di essere responsabile solo di un aspetto specifico di un'esecuzione di richiesta HTTP e delegare altri aspetti ad altri filtri. Un filtro può implementare la memorizzazione nella cache, l'autenticazione, il reindirizzamento, i cookie, la comunicazione effettiva con il server o una combinazione di queste. Il filtro più basso (base) in genere sarà quello che esegue la comunicazione effettiva con la rete.

Molte app che usano HTTP per l'accesso alla rete spesso devono rispondere a diverse condizioni. Alcuni esempi comuni includono:

  • Tentativi di rete (con back-off).
  • Adattamento alle reti a consumo (ad esempio quando una connessione di rete è in roaming).
  • Autenticazione nei siti di social network.
  • Registrazione e telemetria.

Non è difficile gestire uno di questi problemi di rete da soli. Questo diventa un problema complesso quando diversi di questi problemi vengono combinati. Il supporto per i filtri personalizzati nello spazio dei nomi Windows.Web.Http.Filters consente agli sviluppatori di creare codice modulare per filtri semplici. Una serie di filtri semplici può essere collegata a una catena di filtri per gestire combinazioni complesse di problemi. Lo sviluppatore sceglie tutto ciò che riguarda la catena di filtri:

  • Filtri da aggiungere.
  • Ordine di posizionarli nella catena di filtri.

HttpClient è la classe principale usata per inviare e ricevere richieste tramite HTTP. HttpBaseProtocolFilter è ciò che HttpClient usa per inviare e ricevere dati. Quindi HttpBaseProtocolFilter è in genere la parte inferiore di qualsiasi catena di filtri personalizzata. HttpBaseProtocolFilter può essere usato anche per controllare la memorizzazione nella cache e altri comportamenti della connessione HTTP. Ogni istanza di HttpClient può avere una catena di filtri o una pipeline diverse.

Disegno di una catena di filtri HTTP

Per scrivere un filtro personalizzato, un'app implementa una versione personalizzata dell'interfaccia IHttpFilter . Il codice per implementare il comportamento del filtro è nel metodo IHttpFilter.SendRequestAsync . I filtri possono essere scritti in C#/VB.NET o C++. I filtri possono essere chiamati e usati da qualsiasi linguaggio supportato per l'app UWP, incluso JavaScript.

Il codice di esempio mostra un filtro per aggiungere un'intestazione personalizzata alle richieste e alle risposte 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);
    }
}

Per usare un filtro, un'app usa il costruttore HttpClient(IHttpFilter) passando l'interfaccia del filtro da usare per l'istanza di HttpClient . Per configurare la catena di filtri, il nuovo filtro è collegato a un filtro precedente e a HttpBaseProtocolFilter nella parte inferiore.

Il codice di esempio mostra la creazione di un oggetto HttpClient per l'uso di un filtro personalizzato.

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

}

Vedi anche