C# オープンソースのクロスプラットフォーム HTTP クライアント ライブラリ - RestSharp

1. RestSharp の概要

GitHub -restsharp/RestSharp: .NET 用のシンプルな REST および HTTP API クライアントシンプルな REST および .NET 用の HTTP API クライアント。GitHub でアカウントを作成して、restsharp/RestSharp 開発に貢献します。https://github.com/restsharp/RestSharp Web          API インターフェイスは CRUD 操作を実行します。そのような Web API インターフェイスに接続して使用するには、さまざまなオプションがあります。最も人気のあるものの 1 つは Amazon' ■ RestSharp。その主な理由はそのシンプルさです

        RestSharp は、主に RESTful Web サービスの利用を目的としたオープンソースでポータブル (クロスプラットフォーム) の軽量 .NET ライブラリです。RESTful API を使用してデータに対して CRUD (作成、読み取り、更新、削除) 操作を実行できます。RestSharp は、HTTP リクエストの発行と応答の解析のために RESTful API と対話するための人気のあるライブラリです

        RestSharpを使用すると、HTTP リクエストの技術的な詳細を抽象化しながら、RESTful サービスと対話できます。RestSharp は、HTTP クエリの技術的な作業を抽象化しながら、RESTful サービスと対話するための開発者向けのインターフェイスを提供します。RestSharp は、同期リクエストと非同期リクエストの両方を処理できます

2.レストシャープの使い方

2.1. RestSharp の Nuget パッケージをインストールする

2.2. RestSharpの基本的な使い方

   ① RestSharp クライアントをインスタンス化する

var client = new RestClient("http://192.168.3.10:8085/api");

    ② リクエストのインスタンス化(リクエストされたリソース、リソースリクエストのパラメータを含む)

var request = new RestRequest("GetArea");
            request.Method = Method.Post;

    ③実行依頼

var reponse = await client.ExecutePostAsync(request);

2.3. RestSharpの使用例

        たとえば、Post タイプであるエリア情報を取得するためのWebApi インターフェイス [ http://192.168.3.10:8085/api/GetArea ] があります。RestSharp を使用して対応する情報を取得する例は次のとおりです。

using System.Threading;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using RestSharp;

    class Program
    {

        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");



            Task<RestResponse> testResult = Test1();

            Console.WriteLine($"Main方法:{testResult.GetAwaiter().GetResult().Content}\n\n");


             ResultDTO resultDTO = JsonConvert.DeserializeObject<ResultDTO>(testResult.GetAwaiter().GetResult().Content);
            Console.WriteLine($"Test1方法:{resultDTO}\n");

             //Test11();

            Console.ReadLine();

        }

        //多线程测试
        private static void Test11()
        {
            for (int i = 0; i < 3; i++)
            {
                ThreadPool.QueueUserWorkItem(new WaitCallback((obj) =>
                {
                    Console.WriteLine($"{DateTime.Now} 启动{obj} 线程");
                    Task<RestResponse> testResult3 = Test1("http://192.168.3.10:8085/api/", "GetUsers", "{ \"UserName\":\"\"}");
                }),i);
            }
           
           
        }

        /// <summary>
        /// 测试
        /// </summary>
        /// <param name="baseUrl">WebApi的基础路径</param>
        /// <param name="resourceName">WebApi的资源名称</param>
        /// <param name="jsonPara">WebApi资源的json参数字符串</param>
        /// <returns></returns>
        public static async Task<RestResponse> Test1(string baseUrl= "http://192.168.3.10:8085/api/",string resourceName= "GetArea", string jsonPara=null)
        {
            if (string.IsNullOrEmpty(baseUrl) ||string.IsNullOrEmpty(resourceName)) return null;
            var client = new RestClient(baseUrl);

            var request = new RestRequest(resourceName);
            request.Method = Method.Post;
            if (!string.IsNullOrEmpty(jsonPara))
            {
                request.AddBody(jsonPara);
            }


            //var reponse = await client.ExecutePostAsync(request);

            //ResultDTO resultDTO = JsonConvert.DeserializeObject<ResultDTO>(reponse.Content);
            //Console.WriteLine($"Test1方法:{resultDTO}\n");

            var reponse = await client.ExecutePostAsync<ResultDTO>(request);


            return reponse;
        }


        /// <summary>
        /// 解析Json字符串(首尾没有中括号)【线程安全】
        /// </summary>
        /// <param name="jsonStr">需要解析的Json字符串</param>
        /// <returns>返回解析好的Hashtable表</returns>
        private static Hashtable AnalayJsonString(string jsonStr)
        {
            Hashtable ht = new Hashtable();
            if (!string.IsNullOrEmpty(jsonStr))
            {
                JObject jo = (JObject)JsonConvert.DeserializeObject(jsonStr);
                foreach (var item in jo)
                {
                    ht.Add(item.Key, item.Value);
                }
            }

            foreach (DictionaryEntry item in ht)
            {
                Console.WriteLine(item.Key + " " + item.Value);
            }

           return ht;
        }

        #region   解析Json字符串(首尾有中括号)

        /// <summary>
        /// 解析Json字符串(首尾有中括号[存在相同键])【线程安全】
        /// </summary>
        /// <param name="jsonStr">需要解析的Json字符串</param>
        /// <returns>返回解析好的数据</returns>
        public static ConcurrentBag<KeyValuePair<string, object>> AnalayJsonStringMiddleBrackets(string jsonStr)
        {
            ConcurrentBag<KeyValuePair<string, object>> cb = new ConcurrentBag<KeyValuePair<string, object>>();
            if (!string.IsNullOrEmpty(jsonStr))
            {
                JArray jArray = (JArray)JsonConvert.DeserializeObject(jsonStr);//jsonArrayText必须是带[]字符串数组
                if (jArray != null && jArray.Count > 0)
                {
                    foreach (var item in jArray)
                    {
                        foreach (JToken jToken in item)
                        {
                            string[] strTmp = jToken.ToString().Split(':');
                            KeyValuePair<string, object> kv = new KeyValuePair<string, object>(strTmp[0].Replace("\"", ""), strTmp[1].Replace("\"", ""));
                            cb.Add(kv);
                        }
                    }
                }

                foreach (var item in cb)
                {
                    Console.WriteLine(item.Key + " " + item.Value);
                }
            }
            return cb;
        }


 
        #endregion


        public class ResultDTO
        {
            public string Success { get; set; }

            public string Result { get; set; }
            public string StatusCode { get; set; }

            public string Message { get; set; }

            public override string ToString()
            {
                string tmp = string.Empty;
                if (Result.Contains('['))
                {
                    tmp = $"\nSuccess:{Success}\nStatusCode:{StatusCode}\nMessage:{Message}\nResult:{AnalayJsonStringMiddleBrackets(Result)}\n";
                }
                else
                {
                    tmp = $"\nSuccess:{Success}\nStatusCode:{StatusCode}\nMessage:{Message}\nResult:{AnalayJsonString(Result)}\n";
                }
               
                return tmp;
            }

        }
    }

実行結果は以下の通りです。

3. 参考文献 

RestSharp Next (v107+) | RestSharp icon-default.png?t=N5K3https://restsharp.dev/v107/#restsharp-v107 RestSharp を使用して Web API を使用する方法 | InfoWorld icon-default.png?t=N5K3https://www.infoworld.com/article/3252769/how-to-consume-a-web-api-using-restsharp.html  RestSharp で WebAPI を使用する方法 -- Visual Studio マガジンicon-default.png?t=N5K3https://visualstudiomagazine.com/articles/2015/10/01/consume-a-webapi.aspx

RestSharp と C# を使用して RESTful API を使用する - Devart ブログicon-default.png?t=N5K3https://blog.devart.com/consume-a-restful-api-using-restsharp-and-c.html

おすすめ

転載: blog.csdn.net/xiaochenXIHUA/article/details/131544292