C# una biblioteca de cliente HTTP multiplataforma de código abierto - RestSharp

1. Introducción a RestSharp

GitHub - restsharp/RestSharp: Simple REST y HTTP API Client para .NET Simple REST y HTTP API Client para .NET. Contribuya al desarrollo de restsharp/RestSharp creando una cuenta en GitHub. https://github.com/restsharp/RestSharp Las          interfaces Web Api realizan operaciones CRUD; para conectarse a dichas interfaces Web Api y usarlas, tiene varias opciones; y una de las más populares es RestSharp de Amazon, principalmente debido a susencillez

        RestSharp es una biblioteca .NET liviana, portátil (multiplataforma) y de código abierto principalmente para consumir servicios web RESTful; puede realizar operaciones CRUD (crear, leer, actualizar y eliminar) en datos usando cualquier API RESTful; RestSharp es una biblioteca popular para interactuar con las API RESTful para emitir solicitudes HTTP y analizar respuestas .

        Con RestSharp , puede interactuar con los servicios RESTful mientras abstrae los detalles técnicos de las solicitudes HTTP. RestSharp proporciona una interfaz amigable para los desarrolladores para interactuar con los servicios RESTful mientras abstrae el trabajo técnico de las consultas HTTP. RestSharp puede manejar solicitudes sincrónicas y asincrónicas .

2. Cómo usar RestSharp

2.1 Instale el paquete Nuget de RestSharp

2.2 Uso básico de RestSharp

   ① Crear una instancia del cliente RestSharp

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

    ② Instanciar una solicitud (incluidos los recursos solicitados, los parámetros de las solicitudes de recursos)

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

    ③ Solicitud de ejecución

var reponse = await client.ExecutePostAsync(request);

2.3 Ejemplo de uso de RestSharp

        Por ejemplo, tengo una interfaz WebApi [ http://192.168.3.10:8085/api/GetArea ] para obtener información del área, que es de tipo Post, un ejemplo de uso de RestSharp para obtener la información correspondiente es el siguiente:

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;
            }

        }
    }

Los resultados de la ejecución son los siguientes:

3. Referencias 

RestSharp Siguiente (v107+) | RestSharp icono-predeterminado.png?t=N5K3https://restsharp.dev/v107/#restsharp-v107 Cómo consumir una API web usando RestSharp | InfoWorld icono-predeterminado.png?t=N5K3https://www.infoworld.com/article/3252769/how-to-consume-a-web-api-using-restsharp.html  Cómo consumir una WebAPI con RestSharp -- Visual Studio Magazine icono-predeterminado.png?t=N5K3https://visualstudiomagazine.com/articles/2015/10/01/consume-a-webapi.aspx

Consuma una API RESTful usando RestSharp y C# - Blog de Devart icono-predeterminado.png?t=N5K3https://blog.devart.com/consume-a-restful-api-using-restsharp-and-c.html

Supongo que te gusta

Origin blog.csdn.net/xiaochenXIHUA/article/details/131544292
Recomendado
Clasificación