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

这篇具有很好参考价值的文章主要介绍了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包

restsharp 例子,# Web API,http,网络协议,网络,RestSharp,开源跨平台的HTTP库

restsharp 例子,# Web API,http,网络协议,网络,RestSharp,开源跨平台的HTTP库restsharp 例子,# Web API,http,网络协议,网络,RestSharp,开源跨平台的HTTP库

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


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

        }
    }

执行结果如下:

restsharp 例子,# Web API,http,网络协议,网络,RestSharp,开源跨平台的HTTP库

三、参考资料 

RestSharp Next (v107+) | RestSharphttps://restsharp.dev/v107/#restsharp-v107How to consume a Web API using RestSharp | InfoWorldhttps://www.infoworld.com/article/3252769/how-to-consume-a-web-api-using-restsharp.html How To Consume a WebAPI with RestSharp -- Visual Studio Magazinehttps://visualstudiomagazine.com/articles/2015/10/01/consume-a-webapi.aspx

Consume a RESTful API Using RestSharp and C# - Devart Bloghttps://blog.devart.com/consume-a-restful-api-using-restsharp-and-c.html文章来源地址https://www.toymoban.com/news/detail-536768.html

到了这里,关于C#一个开源跨平台的 HTTP 客户端库——RestSharp的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【粉丝福利社】Flutter小白开发——跨平台客户端应用开发学习路线(文末送书-进行中)

    🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,51CTO博客专家等。 🏆《近期荣誉》:

    2024年01月18日
    浏览(87)
  • CPF C#跨平台UI框架开源了

    C#跨平台UI框架 提供NETStandard2.0和net4的库,通过Netcore可以跨平台,支持Windows、Mac、Linux,Net4的可以支持XP。 各个平台运行效果一致,不依赖系统控件。 支持窗体,控件任意透明,支持异形窗体,支持SVG图标显示。 支持动画,数据绑定,Mvvm模式,CSS等,简化依赖属性,数据绑

    2024年02月05日
    浏览(94)
  • C#使用跨平台的PdfSharpCore开源库生成PDF文件

            在进行项目开发中,需要将C#程序的一些文本内容导出为PDF文件(能够根据文本自动分行分页),并且要求这个生成PDF文件的程序是可跨平台的;实现类似效果: ①将程序的文本内容导出为PDF文件; ②能够将文本内容自动分行分页【且可添加页眉、页脚、页码、

    2024年02月16日
    浏览(64)
  • 一个基于.NET Core开源、跨平台的仓储管理系统

    今天给大家推荐一个基于.NET Core开源、跨平台的仓储管理系统,数据库支持MSSQL/MySQL:ZEQP.WMS。 仓储管理系统(Warehouse Management System,WMS)是一种用于管理和控制仓库操作的软件系统,它可以帮助企业实现对仓库内物品的跟踪、存储、拣选、包装和发运等全过程管理,提高仓

    2024年02月21日
    浏览(179)
  • C#使用xamarin进行跨平台开发

    使用 Xamarin 进行跨平台开发可以使用 C# 和 .NET 平台来开发移动应用程序,同时将代码在多个主要移动操作系统上运行,包括 Android 和 iOS。以下是在 C# 中使用 Xamarin 进行跨平台开发的一般步骤: 安装 Xamarin : 在开始之前,你需要安装 Xamarin 开发环境。你可以选择安装 Visual

    2024年02月11日
    浏览(65)
  • Spacedrive:开源跨平台文件管理 | 开源日报 No.57

    Stars: 91.2k License: MIT Deno 是一个简单、现代和安全的 JavaScript 和 TypeScript 运行时,使用 V8 引擎并用 Rust 构建。其主要功能包括: 默认情况下具有高度安全性,除非显式启用,否则无法访问文件、网络或环境。 提供 Web 平台功能和 API (如 ES 模块、Web Workers 和 fetch())。 开箱即用

    2024年02月08日
    浏览(60)
  • C#使用.Net Core进行跨平台开发

    使用 .NET Core 进行跨平台开发是一种灵活的方法,可以在多个操作系统上运行 C# 应用程序。以下是在 C# 中使用 .NET Core 进行跨平台开发的一般步骤: 安装 .NET Core SDK : 在开始之前,需要安装适用于操作系统的 .NET Core SDK。可以从官方网站(https://dotnet.microsoft.com/download)下载

    2024年02月11日
    浏览(61)
  • 【C++】开源:跨平台轻量日志库easyloggingpp

    😏 ★,° :.☆( ̄▽ ̄)/$: .°★ 😏 这篇文章主要介绍跨平台轻量日志库easyloggingpp。 无专精则不能成,无涉猎则不能通。。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路🥞 项目Github地址: https://github.com/abumq/easyloggingpp Eas

    2024年02月16日
    浏览(60)
  • FFmpeg——开源的开源的跨平台音视频处理框架简介

    引言:         FFmpeg是一个开源的跨平台音视频处理框架,可以处理多种音视频格式。它由Fabrice Bellard于2000年创建,最初是一个只包括解码器的项目。后来,很多开发者参与其中,为FFmpeg增加了多种新的功能,例如编码器、过滤器、muxer、demuxer等等,使它成为了一个完整

    2024年03月23日
    浏览(71)
  • 探索Avalonia:C#跨平台UI框架的力量

    随着跨平台应用的需求不断增长,开发人员需要一种能够在不同操作系统上运行的用户界面(UI)框架。 Avalonia 是一种引人注目的选择。在本文中,我们将深入了解 Avalonia 是什么,它与 WPF 的区别,以及它的 UI 绘制引擎和原理、优点,以及一个简单的示例代码。 Avalonia 是什

    2024年04月08日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包