天天看點

Asp.Net Web API 2第三課——.NET用戶端調用Web API

Asp.Net Web API 導航

前言

建立控制台項目

首先建立一個簡單的控制台應用程式,然後通過Nuget來獲得Microsoft.AspNet.WebApi.Client。

Asp.Net Web API 2第三課——.NET用戶端調用Web API

通過搜尋,然後點選安裝即可安裝Web API 用戶端庫。

在項目中添加Model

這個類建立了一個資料對象,HTTPClient可以在HTTP 請求正文中寫入它,也可以從HTTP響應正文中讀取它。

初始化HTTPClient

 建立一個新的HttpClient示例,如下所示:

這是上一教程中的應用程式執行效果展示

Asp.Net Web API 2第三課——.NET用戶端調用Web API

是以我們上面的代碼

然後添加了一個json格式的接受表頭。它告訴要以 JSON 格式發送資料的伺服器接受标頭。

通過Http Get方法來擷取資源

 下面的代碼就是,如何通過API來查詢産品資訊清單。

這個GetAsync方法發送了一個Http Get請求。顧名思義,這個GetAsync方法是異步的。它立即傳回,無需等待服務端的響應。這個傳回值表示一個異步操作的Task對象。當這個操作完成的時候,這個Task.Result屬性包含HTTP響應。

如果 HTTP 響應訓示成功,這個響應正文将包含一個JSON格式的産品資訊清單。為了解析這個清單,需要調用ReadAsAsync。這個方法讀取響應正文并且試圖範序列化到一個指定的CLR類型。這個方法也是異步的, 因為這個響應的正文可以是任意大的。

api/products的請求标頭

Asp.Net Web API 2第三課——.NET用戶端調用Web API

api/products的響應标頭

Asp.Net Web API 2第三課——.NET用戶端調用Web API

api/products的響應正文

Asp.Net Web API 2第三課——.NET用戶端調用Web API

最終調用結果在控制台的展示如下

Asp.Net Web API 2第三課——.NET用戶端調用Web API

通過一個産品ID獲得一個産品資訊

媒體類型格式化辨別

ReadAsAsync是在System.Net.Http.HttpContentExtensions類中定義的擴充方法。不帶參數,它用預設的媒體類型格式辨別設定試圖去解析這個響應正文。這個預設的格式辨別支援JSON、XMl和Form-url-encoded data。

你可以明确的指定媒體類型格式辨別來使用。這是非常有用的如果你有一個自定義的媒體類型格式辨別。

通過HTTP  Post添加一個資源

 下面的代碼就是發送了一個包含Json格式的Product實體的Post請求。

PostAsJsonAsync 是在System.Net.Http.HttpContentExtensions類中定義的擴充方法。它等效于一下内容:

對于XML格式的類型,使用這個PostAsXmlAsync方法。

預設情況下,這個JSON格式表示設定Content-type為“application/json”。你也能明确的指定一個媒體類型。例如: "application/vnd.example.product" 是你的Product實體的媒體類型。你可以設定媒體類型如下:

通過HTTP PUT修改一個資源

 下面的代碼是發送一個PUT請求(接着上面添加的實體進行修改)

這個PutAsJsonAsync方法像PostAsJsonAsync一樣工作,除了它發送一個PUT請求來代替POST之外。

通過HTTP  DELETE删除一個資源

 到了現在,你可以能夠預測怎樣發送一個DELETE請求。

和GET一樣,删除請求并沒有一個請求正文,是以你不需要指定 JSON 或 XML 格式。

Error錯誤處理

 HTTPClient不會抛出一個異常,當它接收到一個錯誤碼的HTTP響應。取而代之的是,這個響應的這個狀态碼屬性中包含這個狀态碼。此外, 如果狀态是成功代碼 (200-299 範圍中的狀态代碼),IsSuccessStatusCode屬性為true。

上面的例子中我們有使用這個模式:

如果你更喜歡将錯誤代碼視為異常來看的話,調用這個EnsureSuccessStatusCode方法。如果這個響應狀态不是一個成功的狀态碼,那麼這個方法就會抛出一個異常。

配置HttpClient

 如果要配置HttpClient,就建立一個WebRequestHandler執行個體,設定它的屬性并将它傳遞給HttpClient構造函數:

WebRequestHandler從HttpMessageHandler派生。您還可以通過從HttpMessageHandler派生插入自定義消息處理程式中。有關詳細資訊,請參閱HTTP消息處理程式(暫未實作)

總結

一步一步的學下來,還是很有收獲的。其中有些地方不太了解還需要慢慢的消化了。