ASP.NET Web API 內容協商基本資訊
內容協商可以定義為為給定資源選擇最佳表示的過程。因此,內容協商意味著客戶端和伺服器可以在它們之間進行協商,以便客戶端可以根據其所需的格式獲取資料。
網際網路依賴三點,
- 資源
- 資源指標(URL)
- 資源的表示
第三點比其他兩點更重要,因為一切都是基於我們如何看待資源而工作的。我們可以用兩種格式表示資源。
- XML(可擴充套件標記語言)格式
- JSON(JavaScript 物件表示法)格式
RESTful 服務的標準之一是,客戶端應該能夠以 JSON 或 XML 來決定他們想要響應的格式。傳送到伺服器的請求包括 Accept 標頭。使用 Accept 標頭,客戶端可以指定響應的格式。
例如,
Accept: application/xml
以 XML 格式返回結果
Accept: application/json
以 JSON 格式返回結果
根據請求中的 Accept 標頭值,伺服器傳送響應。這稱為內容協商。
當我們以特定格式請求資料時,幕後會發生什麼?
ASP.NET Web API 控制器生成我們要傳送到客戶端的資料,並將資料交給 Web API 管道,然後查詢客戶端的 Accept 標頭。然後,選擇適當的格式化程式來格式化資料。
由於 ASP.NET Web API 具有很強的可擴充套件性,因此我們還可以在請求標頭中為 accept 頭指定多個值。
Accept: application/xml,application/json
在上述情況下,伺服器選擇第一個格式化程式來格式化響應資料。
我們還可以在 accept 標頭中指定品質因數。在這種情況下,伺服器選擇具有更高品質因數的格式。
Accept: application/json;q=0.8,application/xml;q=0.5
如果我們沒有指定任何 Accept 標頭,那麼預設情況下伺服器選擇 JSON 格式化程式。
當響應以請求的格式傳送到客戶端時,請注意響應的 Content-Type
標頭設定為適當的值。例如,如果客戶端已請求 application/xml
,則伺服器以 XML 格式傳送資料並設定 Content-Type=application/xml
。
伺服器將格式化程式用於請求和響應訊息。當客戶端向伺服器傳送請求時,我們將 Content-Type 標頭設定為適當的值,以使伺服器知道我們正在傳送的資料的格式。
例如,如果客戶端正在傳送 JSON 資料,則 Content-Type 標頭將設定為 application/json
。伺服器知道它正在處理 JSON 資料,因此它使用 JSON 格式化程式將 JSON 資料轉換為 .NET 型別。類似地,當從伺服器向客戶端傳送響應時,根據 Accept 標頭值,使用適當的格式化程式將 .NET 型別轉換為 JSON,XML 等。
不同型別的響應格式示例:
應用程式/ JSON:
{
"Email": "sample string 1",
"HasRegistered": true,
"LoginProvider": "sample string 3"
}
應用程式/ XML:
<UserInfoViewModel xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/WebApiDemo.Models">
<Email>sample string 1</Email>
<HasRegistered>true</HasRegistered>
<LoginProvider>sample string 3</LoginProvider>
</UserInfoViewModel>
現代基於 Web 的應用程式可以提供各種語言和格式的資料。因此,如果我們開發 API 以覆蓋全球使用者,那麼內容協商就是相關的。