連線到 Web 服務 (HTML)
[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]
這些主題 示範在 Windows 執行階段應用程式中連線到 Web 服務的各種方法。 建議的方法是使用 Windows.Web.Http.HttpClient,這是所有語言都可使用的新 Windows 執行階段類別。 這是功能最完整且強大的 API,應用程式可用來存取 Web 服務。
Windows.Web.Http 命名空間中的類別為現代化 HTTP 用戶端應用程式提供程式設計介面。Windows.Web.Http 命名空間和相關的 Windows.Web.Http.Headers 和 Windows.Web.Http.Filters 命名空間提供 HTTP 用戶端元件,這些元件讓使用者能夠透過 HTTP 提出 HTTP 要求,以及接收來自現代化 Web 服務的 HTTP 回應。
對於基本的 HTTP 要求操作,Windows.Web.Http.HttpClient 提供簡單的介面來處理最常見的工作,並提供合理的預設值,用來進行可套用到大多數案例的驗證 (AUTH)。如果是更複雜的 HTTP 操作,則可使用許多其他功能。
本節的主題也會討論 XMLHttpRequest 的適用於 JavaScript 的 Windows Library 包裝函式 (名稱為 WinJS.xhr)。WinJS.xhr 可以在您的應用程式中輕鬆存取網頁內容。您可以使用 WinJS.xhr,提出 HTTP 或 HTTPS 要求來下載或上傳任何格式的內容和檔案。
XMLHttpRequest 與 WinJS.xhr 不同,後者可以指定是否建立非同步要求,而前者則永遠是非同步的。WinJS.xhr 會傳回 WinJS.Promise,這樣您就可以使用 then 或 done 方法,處理完成的要求、錯誤以及進行中的要求。
警告 您現在可以使用 XMLHttpRequest 來傳輸非常大型的物件,例如 Blob 物件和 FormData 物件,不過可能需要一段很長的時間才能完成。Windows.Web.Http.HttpClient 也可以用來傳送或接收非常大型的物件 (包含串流在內)。因為應用程式可能隨時終止,您應該考慮在 Windows.Networking.BackgroundTransfer 命名空間中使用背景傳輸來進行這些操作。如需上傳和下載大型內容的詳細資訊,請參閱如何上傳檔案和在背景傳輸資料。
下表列出以 JavaScript 撰寫的應用程式存取 Web 服務時可用的 API。平台表示首次新增該項功能的 Windows 版本。
API | 平台 | 註解 |
---|---|---|
Windows 8.1、Windows Phone 8.1、Windows Server 2012 R2 | 建議您使用這個方法連線到 HTTP 伺服器以傳送和接收資料。 以 JavaScript、C#、Visual Basic 及 C++ 撰寫的應用程式也支援此功能 |
|
WinJS.xhr | Windows 8、Windows Phone 8.1、Windows Server 2012 | 在 Windows 8 和 Windows Server 2012 上,當 XMLHttpRequest 不適用時,就會建議使用此方法。 |
XMLHttpRequest | Windows 8、Windows Phone 8.1、Windows Server 2012 | 大多數最新 Web 瀏覽器的 JavaScript 實作都能使用此物件和 API。 |
開發人員對象
使用 JavaScript 和 HTML,並且對建立連線到 Web 服務的應用程式有興趣的開發人員。
本主題中的資訊適用於以 JavaScript 和 HTML 撰寫的應用程式。
如需以 C++/XAML 撰寫的應用程式與使用 .NET Framework 4.5 且以 C# 或 Visual Basic 撰寫的應用程式如何連線到 Web 服務的詳細資訊,請參閱連線到 Web 服務 (XAML)。
在這個章節中
主題 | 說明 |
---|---|
使用 Windows.Web.Http 命名空間中的 Windows.Web.Http.HttpClient 類別,將 GET 要求傳送到 Web 服務並抓取回應。 |
|
使用 "ms-https-connections-only" meta 元素值,您可以禁止應用程式透過 HTTP 連線來瀏覽或擷取其他非媒體類型的網路內容。當您將這個 meta 元素的 content 屬性設成 "true" 時,瀏覽 HTTP 和擷取非媒體類型的網路內容就會失敗。 |
|
WinJS.xhr 讓應用程式可以輕鬆下載網頁內容。這個主題說明如何使用 WinJS.xhr 下載檔案、處理任何錯誤以及報告下載進度,也說明如何下載不同類型的內容。 |
|
您可以在使用 WinJS.xhr (其中包裝 XMLHttpRequest) 時,上傳和下載二進位資料。這個範例說明如何從圖片上傳點陣圖。開啟點陣圖檔案的 Windows 執行階段方法會傳回 IRandomAccessStream,因此您必須使用 MSApp.createBlobFromRandomAccessStream 將它轉換成 Blob。 警告 您現在可以使用 XMLHttpRequest 來上傳或下載大於數 MB 的物件,例如 Blob 物件和 FormData 物件,不過可能需要一段很長的時間才能完成。因為應用程式可能隨時都會終止,您應該考慮使用 Windows 執行階段背景傳輸 API 來進行這些操作。如需上傳和下載內容的詳細資訊,請參閱如何上傳檔案和如何下載檔案。如需一般的背景傳輸討論,請參閱<Transferring data in the background>。 |
|
當您使用 WinJS.xhr 要求 Web 資源時,可能會快取回應,這表示稍後的要求將會傳回已經存在於用戶端電腦上的資源版本,而不是重新傳送要求。不過,您可以新增 HTTP 標頭,確定即使要求已經被快取,還是會再傳送一次。 |
|
使用 XMLHttpRequest 時,可以直接設定逾時值,但是使用 Windows.Web.Http.HttpClient 或 WinJS.xhr 時則無法執行此動作。不過,有一個方法可以在 WinJS.Promise 物件上設定逾時。您可以透過呼叫 WinJS.Promise.timeout,確認如果要求在指定時間內沒有完成就取消要求。 |
|
交互式 Web 應用程式 (Mashup) 是使用兩個以上的來源所建立的新 Web 應用程式。這個範例會示範如何使用 XMLHttpRequest (XHR) 來擷取和顯示遠端的真正簡易新聞訂閱方式 (RSS) 摘要。 |
相關主題
其他資源
參考
範例
使用 Blob 儲存和載入內容範例
XHR、處理瀏覽錯誤及 URL 配置範例