Asp.Net Web API 導航
前言
建立控制台項目
首先建立一個簡單的控制台應用程式,然後通過Nuget來獲得Microsoft.AspNet.WebApi.Client。
通過搜尋,然後點選安裝即可安裝Web API 用戶端庫。
在項目中添加Model
這個類建立了一個資料對象,HTTPClient可以在HTTP 請求正文中寫入它,也可以從HTTP響應正文中讀取它。
初始化HTTPClient
建立一個新的HttpClient示例,如下所示:
這是上一教程中的應用程式執行效果展示
是以我們上面的代碼
然後添加了一個json格式的接受表頭。它告訴要以 JSON 格式發送資料的伺服器接受标頭。
通過Http Get方法來擷取資源
下面的代碼就是,如何通過API來查詢産品資訊清單。
這個GetAsync方法發送了一個Http Get請求。顧名思義,這個GetAsync方法是異步的。它立即傳回,無需等待服務端的響應。這個傳回值表示一個異步操作的Task對象。當這個操作完成的時候,這個Task.Result屬性包含HTTP響應。
如果 HTTP 響應訓示成功,這個響應正文将包含一個JSON格式的産品資訊清單。為了解析這個清單,需要調用ReadAsAsync。這個方法讀取響應正文并且試圖範序列化到一個指定的CLR類型。這個方法也是異步的, 因為這個響應的正文可以是任意大的。
api/products的請求标頭
api/products的響應标頭
api/products的響應正文
最終調用結果在控制台的展示如下
通過一個産品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消息處理程式(暫未實作)
總結
一步一步的學下來,還是很有收獲的。其中有些地方不太了解還需要慢慢的消化了。