ASP.NET Web API 內容協商基本資訊

內容協商可以定義為為給定資源選擇最佳表示的過程。因此,內容協商意味著客戶端和伺服器可以在它們之間進行協商,以便客戶端可以根據其所需的格式獲取資料。

網際網路依賴三點,

  • 資源
  • 資源指標(URL)
  • 資源的表示

第三點比其他兩點更重要,因為一切都是基於我們如何看待資源而工作的。我們可以用兩種格式表示資源。

  1. XML(可擴充套件標記語言)格式
  2. 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 以覆蓋全球使用者,那麼內容協商就是相關的。