Windows.Web.Http.Filters 命名空間

提供類別來傳送 HTTP 要求和介面,以在 UWP 應用程式中建立以 HTTP 和 REST 服務為目標的篩選。

類別

HttpBaseProtocolFilter

HttpClient實例的基底通訊協定篩選。

HttpCacheControl

透過 Windows.Web.HttpWindows.Web.Http.Filters 命名空間的方法,提供本機 HTTP 快取的控制權,以回應 HTTP 要求。

HttpServerCustomValidationRequestedEventArgs

提供 ServerCustomValidationRequested 事件的資料。

介面

IHttpFilter

介面,用來實作 HttpClient 實例的自訂篩選。

列舉

HttpCacheReadBehavior

指出 Windows.Web.HttpWindows.Web.Http.Filters 命名空間中的類別方法讀取要求是否使用本機 HTTP 快取來進行回應。

HttpCacheWriteBehavior

指出 Windows.Web.HttpWindows.Web.Http.Filters 命名空間中,類別方法所使用的要求所傳回的內容是否寫入本機 HTTP 快取。

HttpCookieUsageBehavior

定義 CookieUsageBehavior 屬性中使用的 Cookie 使用行為。

備註

Windows.Web.Http命名空間和相關Windows.Web.Http.Headers和 Windows.Web.Http.Filters 命名空間提供 HTTP 程式設計介面,供想要連線到 HTTP 服務的 UWP 應用程式使用。 HTTP API 為開發人員提供 JavaScript、C#、VB.NET 和 C++ 中的一致支援。 API 也支援在要求和回應上新增自訂篩選。 篩選準則可以簡化處理更複雜的網路問題。 API 也可讓應用程式控制讀取和寫入快取行為。

Windows.Web.Http命名空間中的類別支援根據 Windows.Web.Http.Filters 命名空間中的類別使用篩選。 Windows.Web.Http.Filters 命名空間中的類別也會讓應用程式控制項在用戶端上讀取和寫入快取行為。 Windows.Web.Http.Headers中的HttpCacheDirectiveHeaderValueCollection會針對與 HTTP 要求或回應相關聯之 HTTP 內容之快取控制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 傳送和接收要求的主要類別。 HttpBaseProtocolFilterHttpClient 用來傳送和接收資料的功能。 因此 HttpBaseProtocolFilter 通常是任何自訂篩選鏈結的底部。 HttpBaseProtocolFilter 也可以用來控制 HTTP 連線的快取和其他行為。 每個 HttpClient 實例都可以有不同的篩選鏈結或管線。

HTTP 篩選鏈結的繪圖

若要撰寫自訂篩選,應用程式會實作 IHttpFilter 介面的自訂版本。 實作篩選行為的程式碼位於 IHttpFilter.SendRequestAsync 方法中。 篩選準則可以用 C#/VB.NET 或 C++ 撰寫。 您可以從 UWP 應用程式支援的任何語言呼叫及使用篩選,包括 JavaScript。

範例程式碼會顯示篩選準則,將自訂標頭新增至 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);

}

另請參閱