webapi怎麼呼叫?如何使用程式呼叫webApi介面?
在C#中,傳統呼叫HTTP介面一般有兩種方法:
1.WebRequest/WebResponse組合的方法呼叫
#2.WebClient類別進行呼叫。
第一種方法抽象程度較低,使用較為繁瑣;而WebClient主要面向了WEB網頁場景,在模擬Web操作時使用較為方便,但用在RestFul場景下卻比較麻煩,在Web API發佈的同時,.NET提供了兩個組件:System.Net.Http和System.Net.Http.Formatting。這兩個程式集中最核心的類別是HttpClient。
在.NET4.5中帶有這兩個組件,而.NET4需要到Nuget裡下載Microsoft.Net.Http和Microsoft.AspNet.WebApi.Client這兩個套件才能使用這個類,更低的.NET版本就只能表示遺憾了只能用WebRequest/WebResponse或WebClient來呼叫這些API了。
在使用中,System.Net.Http這個組件提供了HttpClient類別以及相關的HTTP調用,而System.Net.Http.Formatting提供了一些針對HttpClient的幫助擴展,更好地支援了內容協商、Content創建等功能。
下面我就跟大家一起寫這個例子:
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/"); //默认希望响应使用Json序列化(内容协商机制,我接受json格式的数据) client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); //运行client接收程序 Run(client); Console.ReadLine(); } //client接收处理(都是异步的处理) static async void Run(HttpClient client) { //post 请求插入数据 var result = await AddPerson(client); Console.WriteLine($"添加结果:{result}"); //添加结果:true //get 获取数据 var person = await GetPerson(client); //查询结果:Id=1 Name=test Age=10 Sex=F Console.WriteLine($"查询结果:{person}"); //put 更新数据 result = await PutPerson(client); //更新结果:true Console.WriteLine($"更新结果:{result}"); //delete 删除数据 result = await DeletePerson(client); //删除结果:true Console.WriteLine($"删除结果:{result}"); } //post static async Task<bool> AddPerson(HttpClient client) { //向Person发送POST请求,Body使用Json进行序列化 return await client.PostAsJsonAsync("api/Person", new Person() { Age = 10, Id = 1, Name = "test", Sex = "F" }) //返回请求是否执行成功,即HTTP Code是否为2XX .ContinueWith(x => x.Result.IsSuccessStatusCode); } //get static async Task<Person> GetPerson(HttpClient client) { //向Person发送GET请求 return await await client.GetAsync("api/Person/1") //获取返回Body,并根据返回的Content-Type自动匹配格式化器反序列化Body内容为对象 .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发送PUT请求,Body使用Json进行序列化 return await client.PutAsJsonAsync("api/Person/1", new Person() { Age = 10, Id = 1, Name = "test1Change", Sex = "F" }) .ContinueWith(x => x.Result.IsSuccessStatusCode); //返回请求是否执行成功,即HTTP Code是否为2XX } //delete static async Task<bool> DeletePerson(HttpClient client) { return await client.DeleteAsync("api/Person/1") //向Person发送DELETE请求 .ContinueWith(x => x.Result.IsSuccessStatusCode); //返回请求是否执行成功,即HTTP Code是否为2XX } }
這就完成了這組API的調用,是不是非常簡單方便? HTTPClient使用全非同步的方法,並且他有良好的擴展性。
OK,到此為止一組簡單的Restful API和C#的呼叫客戶端就完成了,但這只是開始,Web API是一個很強大的框架,他的擴展點非常豐富,這些擴展能為我們的開發提供許多的幫助。
以上是webApi怎麼調用的詳細內容。更多資訊請關注PHP中文網其他相關文章!