Freigeben über


Windows.Web.Http.Filters Namespace

Stellt Klassen zum Senden von HTTP-Anforderungen und eine Schnittstelle zum Erstellen von Filtern für HTTP- und REST-Dienste in der UWP-App bereit.

Klassen

HttpBaseProtocolFilter

Der Basisprotokollfilter für einen HttpClient-instance.

HttpCacheControl

Ermöglicht die Steuerung des lokalen HTTP-Caches für Antworten auf HTTP-Anforderungen durch Methoden in den Namespaces Windows.Web.Http und Windows.Web.Http.Filters .

HttpServerCustomValidationRequestedEventArgs

Stellt Daten für das ServerCustomValidationRequested-Ereignis bereit .

Schnittstellen

IHttpFilter

Eine Schnittstelle, die verwendet wird, um benutzerdefinierte Filter für einen HttpClient-instance zu implementieren.

Enumerationen

HttpCacheReadBehavior

Gibt an, ob Leseanforderungen von Klassenmethoden in den Namespaces Windows.Web.Http und Windows.Web.Http.Filters den lokalen HTTP-Cache für die Antwort verwenden.

HttpCacheWriteBehavior

Gibt an, ob Inhalte, die von Anforderungen zurückgegeben werden, die von Klassenmethoden in den Namespaces "Windows.Web.Http " und "Windows.Web.Http.Filters " verwendet werden, in den lokalen HTTP-Cache geschrieben werden.

HttpCookieUsageBehavior

Definiert das Cookienutzungsverhalten, das in der CookieUsageBehavior-Eigenschaft verwendet wird.

Hinweise

Der Windows.Web.Http-Namespace und die zugehörigen Windows.Web.Http.Headers - und Windows.Web.Http.Filters-Namespaces stellen eine HTTP-Programmierschnittstelle für UWP-Apps bereit, die eine Verbindung mit HTTP-Diensten herstellen möchten. Die HTTP-API bietet konsistente Unterstützung in JavaScript, C#, VB.NET und C++ für Entwickler. Die API unterstützt auch das Hinzufügen benutzerdefinierter Filter für Anforderungen und Antworten. Filter können die Behandlung komplexerer Netzwerkprobleme vereinfachen. Die API ermöglicht es einer App auch, das Zwischenspeicherungsverhalten für Lese- und Schreibvorgänge zu steuern.

Klassen im Windows.Web.Http-Namespace unterstützen die Verwendung von Filtern basierend auf den Klassen im Windows.Web.Http.Filters-Namespace. Klassen im Windows.Web.Http.Filters-Namespace ermöglichen einer App auch die Steuerung des Lese- und Schreibcacheverhaltens auf dem Client. Die HttpCacheDirectiveHeaderValueCollection in Windows.Web.Http.Headers stellt einen Sammlungscontainer für Instanzen der Cachedirektiven im CACHE-Control-HTTP-Header für HTTP-Inhalte bereit, die einer HTTP-Anforderung oder -Antwort zugeordnet sind. Der Cache-Control-Header ermöglicht einer App mehr Kontrolle über das Zwischenspeicherungsverhalten.

Klassen im Windows.Web.Http.Headers-Namespace stellen HTTP-Header dar, wie in RFC 2616 von der IETF definiert.

Die HttpClient-Klasse im Windows.Web.Http-Namespace stellt eine Basisklasse zum Senden von HTTP-Anforderungen und zum Empfangen von HTTP-Antworten bereit. Filter stellen einen Handlermechanismus bereit, um bei allgemeinen HTTP-Dienstproblemen zu helfen. Einfache Filter können in einer Sequenz miteinander verkettet werden, um komplexere HTTP-Dienstprobleme zu behandeln.

Ein HTTP-Filter ist ein Blackbox, das eine HTTP-Anforderungsnachricht akzeptiert und eine HTTP-Antwortnachricht erzeugt. Wie der Filter eine HTTP-Antwort erhält, wird vom Filterentwickler bestimmt. Filter fügen häufig Header hinzu oder ändern sie, behandeln die Autorisierung (möglicherweise mithilfe des WebAuthenticationBroker) oder lassen eine Anforderung basierend auf Netzwerkbedingungen zu oder verbieten. Filter nehmen in der Regel Änderungen vor und übergeben dann die Anforderung an einen inneren Filter, der in der Regel festgelegt wird, wenn ein Filter erstellt wird.

Dieser Ansatz ermöglicht es einem Filter, nur für einen bestimmten Aspekt einer HTTP-Anforderungsausführung verantwortlich zu sein und andere Aspekte an andere Filter zu delegieren. Ein Filter kann Zwischenspeicherung, Authentifizierung, Umleitungen, Cookies, die tatsächliche Kommunikation mit dem Server oder eine Kombination aus diesen implementieren. Der unterste Filter (Basisfilter) ist in der Regel derjenige, der die tatsächliche Kommunikation mit dem Netzwerk durchführt.

Viele Apps, die HTTP für den Netzwerkzugriff verwenden, müssen häufig auf eine Vielzahl von Bedingungen reagieren. Einige gängige Beispiele sind:

  • Netzwerkwiebeleholung (mit Back-Off).
  • Anpassung an getaktete Netzwerke (z. B. wenn eine Netzwerkverbindung Roaming ist).
  • Authentifizierung bei Websites sozialer Netzwerke.
  • Protokollierung und Telemetrie.

Es ist nicht schwer, diese Netzwerkprobleme selbst zu behandeln. Dies wird zu einem komplexen Problem, wenn mehrere dieser Probleme kombiniert werden. Mithilfe der Unterstützung für benutzerdefinierte Filter im Windows.Web.Http.Filters-Namespace können Entwickler modularen Code für einfache Filter erstellen. Eine Reihe einfacher Filter kann mit einer Kette von Filtern verknüpft werden, um komplexe Kombinationen von Problemen zu behandeln. Der Entwickler wählt alles über die Filterkette aus:

  • Die hinzuzufügenden Filter.
  • Die Reihenfolge, in der sie in der Filterkette platziert werden sollen.

HttpClient ist die Standard Klasse, die zum Senden und Empfangen von Anforderungen über HTTP verwendet wird. HttpBaseProtocolFilter verwendet HttpClient zum Senden und Empfangen von Daten. HttpBaseProtocolFilter ist daher in der Regel der untere Rand jeder benutzerdefinierten Filterkette. HttpBaseProtocolFilter kann auch verwendet werden, um die Zwischenspeicherung und anderes Verhalten der HTTP-Verbindung zu steuern. Jeder HttpClient-instance kann über eine andere Filterkette oder Pipeline verfügen.

Zeichnen einer HTTP-Filterkette

Um einen benutzerdefinierten Filter zu schreiben, implementiert eine App eine benutzerdefinierte Version der IHttpFilter-Schnittstelle . Der Code zum Implementieren des Filterverhaltens befindet sich in der IHttpFilter.SendRequestAsync-Methode . Filter können in C#/VB.NET oder C++ geschrieben werden. Filter können in jeder sprache aufgerufen und verwendet werden, die für UWP-Apps unterstützt wird, einschließlich JavaScript.

Der Beispielcode zeigt einen Filter zum Hinzufügen eines benutzerdefinierten Headers zu HTTP-Anforderungen und -Antworten.

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

Um einen Filter zu verwenden, verwendet eine App den HttpClient(IHttpFilter)-Konstruktor, der die Schnittstelle des Filters übergibt, die für den HttpClient-instance verwendet werden soll. Um die Filterkette einzurichten, wird der neue Filter mit einem vorherigen Filter und unten mit HttpBaseProtocolFilter verknüpft.

Der Beispielcode zeigt das Erstellen eines HttpClient für die Verwendung eines benutzerdefinierten Filters.

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

}

Weitere Informationen