您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(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ò),可以把它分享出去讓更多的人看到。
免責(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)容。