WebApiの呼び出し方法

藏色散人
リリース: 2019-06-03 16:43:30
オリジナル
8018 人が閲覧しました

WebApiの呼び出し方法

webapi を呼び出すにはどうすればよいですか?プログラムを使用して webApi インターフェイスを呼び出すにはどうすればよいですか?

C# では、通常、HTTP インターフェイスを呼び出す方法が 2 つあります:

1. WebRequest/WebResponse 結合メソッド呼び出し

2.呼び出すWebClientクラス。

最初の方法は抽象度が低く、使用するのがより面倒です。一方、WebClient は主に WEB Web ページのシナリオを対象としており、Web 操作をシミュレートするときに使用すると便利ですが、RestFul シナリオで使用するのはより面倒です。 Web API の場合 リリース時点では、.NET には System.Net.Http と System.Net.Http.Formatting という 2 つのアセンブリが提供されています。これら 2 つのアセンブリのコア クラスは HttpClient です。

これら 2 つのアセンブリは .NET4.5 に含まれており、.NET4 でこのクラスを使用するには、Nuget から 2 つのパッケージ Microsoft.Net.Http および Microsoft.AspNet.WebApi.Client をダウンロードする必要があります。遺憾の意を表明することしかできず、WebRequest/WebResponse または WebClient を使用してこれらの API を呼び出すことしかできません。

使用時には、System.Net.Http アセンブリは HttpClient クラスと関連する HTTP 呼び出しを提供し、System.Net.Http.Formatting はコンテンツ ネゴシエーション、コンテンツ作成、およびその他の機能をより適切にサポートするために HttpClient 用のいくつかのヘルプ拡張機能を提供します。 。

この例を一緒に書いてみましょう:

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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート