揭開HttpClient APIs在UWP的神秘面紗

揭開HttpClient APIs在UWP的神秘面紗

日前很高興有機會去參加SkillTree的UWP 與 Microsoft Azure 實戰課程(臺北場)課程,其中一個段落正是在介紹HttpClient APIs,我才知道目前的HttpClient在UWP有兩個實作:System.Net.Http.HttpClient 類別Windows.Web.Http.HttpClient 類別。它們兩個都應優先於WebClient和HttpWebRequest來使用。

這引起了我的好奇。看了一些文章與討論區,都沒有感到滿意的回答。最近剛好看到一篇官方 Blog 的文章,正是討論兩者的差異,覺得交代的很清楚,以下是我不負責簡單翻譯加筆記。

HttpClient 概述

System.Net.Http.HttpClient 類別是我們網頁開發人員(特別指 ASP.NET MVC / ASP.NET Web API)比較熟悉的 APIs,它在 .NET Framework 4.5 出現並可由 NuGet 下載,並且向下相容 .NET Framework 4.0與 Windows Phone 8 應用程式。相較於舊的 HttpWebRequest API,它的目標就是提供簡單又乾淨的抽象層並實作一個靈活的 HTTP 用戶端角色。例如,它允許串接(chain)自訂處理常式,每個開發人員可以獲取每個請求與回應並實作自訂邏輯。直到 Windows 8.1,此 API 都是完全受托管(full managed) .NET Framework 實作。在 Windows 10,此 API 的 UWP 實作改變提升到 Windows.Web.Http 和 Windows 的 WinINet HTTP Stack 的層級。

另一方面,Windows.Web.Http.HttpClient API 出現在 Windows 8.1,並且可用於 Windows Phone 8.1。建立此 API 的動機是想要為不同的 Windows app 語言(C#, VB, C++, JavaScript) 提共一個強健的 HTTP APIs,並在此 API 支援所有功能。此 API 都是基於 System.Net.Http 與 Windows 的 WinINet HTTP Stack 來設計與實作。

我們可以從以下表格來看:

API OS版本 支援語言
System.Net.Http.HttpClient Windows, Windows Phone 8 .NET Framework語言
Windows.Web.Http.HttpClient Windows, Windows Phone 8.1 所有 Windows App 語言

應該選擇那一個?

兩者都能使用於UWP,那麼應該使用那一個在App裡呢?以下是兩個簡單的區分點:

你是否需要整合原生UI來處理使用者憑證、Http 快取讀寫、或傳遞 SSL 的用戶用憑證以驗證身分?

如果是,那選用 Windows.Web.Http.HttpClient API。就目前為止,Windows.Web.Http.HttpClient API 在 UWP 裡提供比 System.Net.Http.HttpClient API 更好的的 HTTP 設置。

你是如需要撰寫跨平台的 .NET 程式碼(跨 UWP/ASP.NET 5/iOS/Android)?

如果是,那選用 System.Net.Http.HttpClient API,它允許你去重覆使用你的程式碼,像是在 ASP.NET 5 和 .NET Framework 桌面應用程式。其他如 Xamarin 的 API 可支援 iOS 和 Android。

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。