【WebApi】通過HttpClient調用Web Api接口


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 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM