溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

webApi如何調(diào)用

發(fā)布時(shí)間:2020-09-22 14:27:32 來(lái)源:億速云 閱讀:185 作者:小新 欄目:編程語(yǔ)言

這篇文章將為大家詳細(xì)講解有關(guān)webApi如何調(diào)用,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

webapi怎么調(diào)用?如何使用程序調(diào)用webApi接口?

在C#中,傳統(tǒng)調(diào)用HTTP接口一般有兩種辦法:

1.WebRequest/WebResponse組合的方法調(diào)用

2.WebClient類進(jìn)行調(diào)用。

第一種方法抽象程度較低,使用較為繁瑣;而WebClient主要面向了WEB網(wǎng)頁(yè)場(chǎng)景,在模擬Web操作時(shí)使用較為方便,但用在RestFul場(chǎng)景下卻比較麻煩,在Web API發(fā)布的同時(shí),.NET提供了兩個(gè)程序集:System.Net.Http和System.Net.Http.Formatting。這兩個(gè)程序集中最核心的類是HttpClient。

在.NET4.5中帶有這兩個(gè)程序集,而.NET4需要到Nuget里下載Microsoft.Net.Http和Microsoft.AspNet.WebApi.Client這兩個(gè)包才能使用這個(gè)類,更低的.NET版本就只能表示遺憾了只能用WebRequest/WebResponse或者WebClient來(lái)調(diào)用這些API了。

在使用中,System.Net.Http這個(gè)程序集提供了HttpClient類以及相關(guān)的HTTP調(diào)用,而System.Net.Http.Formatting提供了一些針對(duì)HttpClient的幫助擴(kuò)展,更好地支持了內(nèi)容協(xié)商、Content創(chuàng)建等功能。

下面我就和大家一起寫一下這個(gè)例子:

public class Person

    {

        public long Id { get; set; }        public string Name { get; set; } 

        public int Age { get; set; } 

        public string Sex { get; set; } 

        public override string ToString()

        {            return $"Id={Id} Name={Name} Age={Age} Sex={Sex}";

        }

    }
class Program
   {
       static void Main(string[] args)
       {
           var client = new HttpClient();
           //基本的API URL
           client.BaseAddress = new Uri("http://localhost:22658/");
           //默認(rèn)希望響應(yīng)使用Json序列化(內(nèi)容協(xié)商機(jī)制,我接受json格式的數(shù)據(jù))
           client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
           //運(yùn)行client接收程序
           Run(client);
           Console.ReadLine();
       }
       //client接收處理(都是異步的處理)
       static async void Run(HttpClient client)
       {
           //post 請(qǐng)求插入數(shù)據(jù)
           var result = await AddPerson(client);
           Console.WriteLine($"添加結(jié)果:{result}"); //添加結(jié)果:true
           
           //get 獲取數(shù)據(jù)
           var person = await GetPerson(client);
           //查詢結(jié)果:Id=1 Name=test Age=10 Sex=F
           Console.WriteLine($"查詢結(jié)果:{person}"); 
           //put 更新數(shù)據(jù)
           result = await PutPerson(client);
           //更新結(jié)果:true
           Console.WriteLine($"更新結(jié)果:{result}"); 
           //delete 刪除數(shù)據(jù)
           result = await DeletePerson(client);
           //刪除結(jié)果:true
           Console.WriteLine($"刪除結(jié)果:{result}"); 
       }
       
       //post
       static async Task<bool> AddPerson(HttpClient client)
       {
           //向Person發(fā)送POST請(qǐng)求,Body使用Json進(jìn)行序列化
           return await client.PostAsJsonAsync("api/Person", new Person() { Age = 10, Id = 1, Name = "test", Sex = "F" }) 
                               //返回請(qǐng)求是否執(zhí)行成功,即HTTP Code是否為2XX
                               .ContinueWith(x => x.Result.IsSuccessStatusCode);  
       }
       
       //get
       static async Task<Person> GetPerson(HttpClient client)
       {
           //向Person發(fā)送GET請(qǐng)求
           return await await client.GetAsync("api/Person/1") 
           //獲取返回Body,并根據(jù)返回的Content-Type自動(dòng)匹配格式化器反序列化Body內(nèi)容為對(duì)象
                                    .ContinueWith(x => x.Result.Content.ReadAsAsync<Person>(                             
                   new List<MediaTypeFormatter>() {new JsonMediaTypeFormatter()/*這是Json的格式化器*/
                                                   ,new XmlMediaTypeFormatter()/*這是XML的格式化器*/}));
       }
       
       //put
       static async Task<bool> PutPerson(HttpClient client)
       {
           //向Person發(fā)送PUT請(qǐng)求,Body使用Json進(jìn)行序列化
           return await client.PutAsJsonAsync("api/Person/1", new Person() { Age = 10, Id = 1, Name = "test1Change", Sex = "F" }) 
                               .ContinueWith(x => x.Result.IsSuccessStatusCode);  //返回請(qǐng)求是否執(zhí)行成功,即HTTP Code是否為2XX
       }
       //delete
       static async Task<bool> DeletePerson(HttpClient client)
       {
           return await client.DeleteAsync("api/Person/1") //向Person發(fā)送DELETE請(qǐng)求
                              .ContinueWith(x => x.Result.IsSuccessStatusCode); //返回請(qǐng)求是否執(zhí)行成功,即HTTP Code是否為2XX
       }
}

這就完成了這組API的調(diào)用,是不是非常簡(jiǎn)單方便?HTTPClient使用全異步的方法,并且他有良好的擴(kuò)展性。

關(guān)于webApi如何調(diào)用就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI