Windows.Web.Http.Filters 名前空間

HTTP 要求を送信するクラスと、UWP アプリで HTTP および REST サービスを対象とするフィルターを作成するインターフェイスを提供します。

クラス

HttpBaseProtocolFilter

HttpClient インスタンスの基本プロトコル フィルター。

HttpCacheControl

Windows.Web.Http 名前空間と Windows.Web.Http.Filters 名前空間のメソッドによる HTTP 要求への応答に対するローカル HTTP キャッシュの制御を提供します。

HttpServerCustomValidationRequestedEventArgs

ServerCustomValidationRequested イベントのデータを提供します。

インターフェイス

IHttpFilter

HttpClient インスタンスのカスタム フィルターを実装するために使用されるインターフェイス。

列挙型

HttpCacheReadBehavior

Windows.Web.Http 名前空間および Windows.Web.Http.Filters 名前空間のクラス メソッドによる読み取り要求が、応答にローカル HTTP キャッシュを使用するかどうかを示します。

HttpCacheWriteBehavior

Windows.Web.Http 名前空間および Windows.Web.Http.Filters 名前空間のクラス メソッドによって使用される要求によって返されたコンテンツがローカル HTTP キャッシュに書き込まれるかどうかを示します。

HttpCookieUsageBehavior

CookieUsageBehavior プロパティで使用される Cookie の使用動作を定義します。

注釈

Windows.Web.Http 名前空間と、関連する Windows.Web.Http.Headers 名前空間と Windows.Web.Http.Filters 名前空間は、HTTP サービスに接続する UWP アプリ用の HTTP プログラミング インターフェイスを提供します。 HTTP API は、開発者向けの JavaScript、C#、VB.NET、C++ で一貫したサポートを提供します。 この API では、要求と応答に対するカスタム フィルターの追加もサポートされています。 フィルターを使用すると、より複雑なネットワークの問題の処理を簡略化できます。 この API を使用すると、アプリで読み取りと書き込みのキャッシュ動作を制御することもできます。

Windows.Web.Http 名前空間のクラスは、Windows.Web.Http.Filters 名前空間のクラスに基づくフィルターの使用をサポートしています。 Windows.Web.Http.Filters 名前空間のクラスを使用すると、アプリはクライアントでのキャッシュ動作の読み取りと書き込みを制御することもできます。 Windows.Web.Http.HeadersHttpCacheDirectiveHeaderValueCollection は、HTTP 要求または応答に関連付けられている HTTP コンテンツの Cache-Control HTTP ヘッダーのキャッシュ ディレクティブのインスタンス用のコレクション コンテナーを提供します。 Cache-Control ヘッダーを使用すると、アプリでキャッシュ動作をより詳細に制御できます。

Windows.Web.Http.Headers 名前空間のクラスは、IETF によって RFC 2616 で定義されている HTTP ヘッダーを表します。

Windows.Web.Http 名前空間の HttpClient クラスは、HTTP 要求を送信し、HTTP 応答を受信するための基本クラスを提供します。 フィルターは、一般的な HTTP サービスの問題に役立つハンドラー メカニズムを提供します。 より複雑な HTTP サービスの問題を処理するために、単純なフィルターを順番に連結できます。

HTTP フィルターは、HTTP 要求メッセージを受け取り、HTTP 応答メッセージを生成するブラック ボックスです。 フィルターが HTTP 応答を取得する方法は、フィルター開発者によって決定されます。 フィルターは、通常、ヘッダーの追加または変更、承認の処理 ( WebAuthenticationBroker を使用する場合があります)、またはネットワーク条件に基づいて要求を許可または禁止します。 通常、フィルターは変更を行い、その要求を内部フィルターに渡します。これは通常、フィルターの作成時に設定されます。

この方法では、フィルターが HTTP 要求の実行の特定の側面のみを担当し、他の側面を他のフィルターに委任できます。 フィルターは、キャッシュ、認証、リダイレクト、Cookie、サーバーとの実際の通信、またはこれらの組み合わせを実装できます。 通常、最下位 (ベース) フィルターは、ネットワークとの実際の通信を行うフィルターです。

ネットワーク アクセスに HTTP を使用する多くのアプリでは、多くの場合、さまざまな条件に対応する必要があります。 一般的な例を次に示します。

  • ネットワーク再試行 (バックオフあり)。
  • 従量制課金ネットワークへの適応 (ネットワーク接続がローミングされている場合など)。
  • ソーシャル ネットワーク サイトへの認証。
  • ログとテレメトリ。

これらのネットワークの問題を自分で処理するのは難しくありません。 これらの問題のいくつかを組み合わせると、これは複雑な問題になります。 Windows.Web.Http.Filters 名前空間でのカスタム フィルターのサポートにより、開発者は単純なフィルター用のモジュール型コードを作成できます。 一連の単純なフィルターをフィルターのチェーンにリンクして、複雑な問題の組み合わせを処理できます。 開発者は、フィルター チェーンに関するすべてのものを選択します。

  • 追加するフィルター。
  • フィルター チェーンに配置する順序。

HttpClient は、HTTP 経由で要求を送受信するために使用されるメイン クラスです。 HttpBaseProtocolFilter は、 HttpClient が データの送受信に使用します。 そのため、 HttpBaseProtocolFilter は通常、カスタム フィルター チェーンの下部です。 HttpBaseProtocolFilter を使用して、HTTP 接続のキャッシュやその他の動作を制御することもできます。 各 HttpClient インスタンスには、異なるフィルター チェーンまたはパイプラインを含めることができます。

HTTP フィルター チェーンの描画

カスタム フィルターを記述するために、アプリは IHttpFilter インターフェイスのカスタム バージョンを実装します。 フィルター動作を実装するコードは、 IHttpFilter.SendRequestAsync メソッドにあります。 フィルターは、C#/VB.NET または C++ で記述できます。 フィルターは、JavaScript を含む UWP アプリでサポートされている任意の言語から呼び出して使用できます。

サンプル コードは、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);

}

こちらもご覧ください