C#一个开源跨平台的 HTTP 客户端库——RestSharp

一、RestSharp简介

GitHub - restsharp/RestSharp: Simple REST and HTTP API Client for .NETSimple REST and HTTP API Client for .NET. Contribute to restsharp/RestSharp development by creating an account on GitHub.https://github.com/restsharp/RestSharp         在进行软件开发的时侯,你可能经常需要使用一些公共的Web Api接口执行 CRUD 操作;要连接到这样的Web Api接口并使用它们,您可以有多样的选择;而其中最流行的便是亚马孙的RestSharp,主要是因为它的简单性。

        RestSharp 是一个开源的、可移植(跨平台)、轻量级的.NET 库,主要用于使用 RESTful Web 服务;它可以使用任何 RESTful API 对数据执行 CRUD (创建、读取、更新和删除)操作;RestSharp 是一个用于与 RESTful API 交互的流行库,用于发出 HTTP 请求和解析响应

        使用 RestSharp,您可以在抽象 HTTP 请求的技术细节时与 RESTful 服务进行交互。RestSharp 提供了一个开发人员友好的界面,用于在抽象 HTTP 查询的技术工作时与 RESTful 服务进行交互。RestSharp 可以处理同步和异步请求

二、RestSharp使用方法

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的使用示例

        比如我这里有一个WebApi接口【http://192.168.3.10:8085/api/GetArea】用于获取区域信息,是Post类型;使用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;}#endregionpublic 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;}}}

执行结果如下:

三、参考资料 

RestSharp Next (v107+) | RestSharpicon-default.png?t=N5K3https://restsharp.dev/v107/#restsharp-v107How to consume a Web API using RestSharp | InfoWorldicon-default.png?t=N5K3https://www.infoworld.com/article/3252769/how-to-consume-a-web-api-using-restsharp.html How To Consume a WebAPI with RestSharp -- Visual Studio Magazineicon-default.png?t=N5K3https://visualstudiomagazine.com/articles/2015/10/01/consume-a-webapi.aspx

Consume a RESTful API Using RestSharp and C# - Devart Blogicon-default.png?t=N5K3https://blog.devart.com/consume-a-restful-api-using-restsharp-and-c.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/14572.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kafka的保姆级简易安装启动、关闭注意事项、简单使用

一.安装&#xff1a; 1.1Windows本机tar包安装 1.下载tar包 地址&#xff1a;Apache Download Mirrors&#xff0c;点击下面的连接先将tar包下载下来 2.解压到任意地址但自己要记得位置 3.进入到config文件找到server.properties更改信息 搜索&#xff0c;然后找到下面的地…

uniapp打包app,对接华为厂商,实现unipush离线消息推送

今天终于可以抽出点时间&#xff0c;来记录一下这几天心塞的心情。上周公司派过来一个活&#xff0c;说是使用uniapp制作一个app&#xff0c;同时要实现在线消息推送和离线消息推送&#xff0c;啥话没说就揽了下来。不过说实在的&#xff0c;从来没有开发过app&#xff0c;好歹…

SpringMVC原理分析 | 数据处理:ModelAndView

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 重定向和转发 ModelAndView 设置ModelAndView对象&#xff0c;根据view的名称、视图解析器跳转到指定的页面 页面&#xff1a;{视图解析器前缀} viewName {视图解析器…

基于matlab对于未校准立体图像校正(附源码)

一、前言 此示例说明如何计算两个未校准图像的校正&#xff0c;其中相机内禀函数未知。 立体图像校正将图像投影到公共图像平面上&#xff0c;以使相应的点具有相同的行坐标。此过程对于立体视觉很有用&#xff0c;因为 2-D 立体对应问题被简化为 1-D 问题。例如&#xff0c;…

网络应用基础ENSP环境的安装(NETBASE第三课)

网络应用基础ENSP环境的安装(NETBASE第三课) eNSP(Enterprise Network Simulation Platform)是一款由华为提供的、可扩展的、图形化操作的网络仿真工具平台&#xff0c;主要对企业网络路由器、交换机进行软件仿真&#xff0c;完美呈现真实设备实景&#xff0c;支持大型网络模拟…

vue3+pinia用户信息持久缓存(token)的问题

vue3pinia用户信息持久缓存&#xff08;token)的问题 对博主来说&#xff0c;这是个相当复杂的问题。 当初在使用vue2vuex进行用户信息持久登录时&#xff0c;写了不下3篇博客&#xff0c;确实是解决了问题&#xff0c;博客链接如下 vue存储和使用后端传递过来的tokenvue中对…

抖音短视频矩阵管理系统源码开发部署(开源定制)

一、什么是短视频矩阵管理系统&#xff1f; 短视频矩阵管理系统是专门为企业号商家、普通号商家提供帐号运营从流量 到转化成交的一站式服务方案&#xff0c;具体包含&#xff1a;点赞关注评论主动私信 &#xff0c;评论区回复&#xff0c;自动潜客户挖掘&#xff0c;矩阵号营销…

Maven高级(四)--私服

一.作用 我们所拆分的模块是可以在同一个公司各个项目组之间的项目组之间进行资源共享的&#xff0c;这就需要Maven的私服来实现。 二.场景 两个项目组之间如何基于私服进行资源的共享的呢&#xff1f; 例如A开发了一个模块tlias-utils,B团队进行项目开发&#xff0c;要想使用…

身高排队,不是你想的那么简单——力扣“按身高排序”题解分析

本篇博客会讲解力扣“2418. 按身高排序”的解题思路&#xff0c;这是题目链接。 想要排序身高数组是非常简单的。我们在对身高数组进行排序时&#xff0c;会进行一些操作&#xff0c;比如交换2个元素等等。本题中&#xff0c;相当于我们要“记住”排序身高数组中进行了哪些操作…

2023校招,2024校招,社招Shein,大量HC,使用内推码直达,流程快速

广州&#xff0c;深圳&#xff0c;南京&#xff0c;大量开发岗位&#xff0c;包含Java开发岗&#xff0c;前端开发岗大数据开发岗位&#xff0c;产品岗位&#xff0c;测试岗位等等&#xff0c;大量hc&#xff0c;欢迎大家投递Shein&#xff0c;打造全球化的快时尚跨境电商品牌

【计算机视觉 | 图像分割】arxiv 计算机视觉关于图像分割的学术速递(7 月 4 日论文合集)

文章目录 一、分割|语义相关(18篇)1.1 TomatoDIFF: On-plant Tomato Segmentation with Denoising Diffusion Models1.2 CGAM: Click-Guided Attention Module for Interactive Pathology Image Segmentation via Backpropagating Refinement1.3 RefSAM: Efficiently Adapting …

Pico版节奏光剑简单制作

视频教程参考&#xff1a;Pico VR Neo3开发实战教程&#xff08;1&#xff09;——节奏光剑&#xff0c;舞台灯效_哔哩哔哩_bilibili 1、新建项目和pico配置 插件导入 找到下载的pico SDK 选择json文件&#xff0c;点击即可导入 启用插件 在 Project Settings 窗口中&#xf…