HttpClient是一個封裝好的類,它在很多語言中都有被實現,現在HttpClient最新的版本是4.5。
它支持所有的http方法,自動轉向,https協議,代理服務器。
一.Api接口參數標准化。
GET方式,可以有多個重載,有多個參數
POST方式,只能有一個參數,並且用[FromBody]約束,如果有多個參數,需要以對象的方式進行傳遞
Put方式,只能有兩個參數,其中一個是通過Request.QueryString方式進行傳遞的,作為要更新對象的主鍵,別一個是[FromBody]字段,也是一個字段,如果多個字段需要把它封裝成對象。
二.調用方
我們看一下最基本網頁中ajax請求(Get | Set)
$.ajax({ url: "http://localhost:xxx/api/register", type: "GET", success: function (data) { console.log("json:" + data); } }); $.ajax({ url: "http://localhost:xxx/api/register", type: "Post",
data: {'':''} success: function (data) { console.log("json:" + data); } });
三.通過控制台實現Get&&Post請求
//Get: static async void ClientGet() { string url = "http://localhost:xxx/api/register"; var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip }; using ( var http = new HttpClient( handler ) ) { var response = await http.GetAsync( url ); response.EnsureSuccessStatusCode(); await response.Content.ReadAsStringAsync(); } } /* * / <summary> * / HttpClient實現Post請求 * / </summary> */
static async void dooPost() { string url = "http://localhost:52824/api/register"; var userId = "1"; /* 設置HttpClientHandler的AutomaticDecompression */
var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip }; /* 創建HttpClient(注意傳入HttpClientHandler) */
using ( var http = new HttpClient( handler ) ) { /* 使用FormUrlEncodedContent做HttpContent */
var content = new FormUrlEncodedContent( new Dictionary<string, string>() { { "", userId } /* 鍵名必須為空 */ } ); /* await異步等待回應 */
var response = await http.PostAsync( url, content ); /* 確保HTTP成功狀態值 */ response.EnsureSuccessStatusCode(); /* await異步讀取最后的JSON(注意此時gzip已經被自動解壓縮了,因為上面的AutomaticDecompression = DecompressionMethods.GZip) */ Console.WriteLine( await response.Content.ReadAsStringAsync() ); } }
無論是web,手機端,都是有自己的WebClient,都是一樣的,語言也是,那如果說你的Api是一個的參數是一個對象類型的,這還是大同小異的,比如ajax的調用方式直接把data變成一個data對象,那我們C#的這個參數應該是個什么呢,這個時候我們應該用到FormUrlEncodedContent,使用這個類型去做httpcontext.
var content = new FormUrlEncodedContent(new Dictionary<string, string>()
{ {"Id","6"},
{"Name","zara"},
{"Info", "zzh"}
});
那最后呢也沒有什么區別了,只不過在異步去請求的時候去更換PostAsync , GetAsync , PutAsync 。