您现在的位置是:首页 > 正文

C/S客户端调用RESTful API帮助类

2024-01-30 19:43:39阅读 3

文章目录

一、简介

二、源码

         1.HttpClientHelper帮助类

2.ContentType枚举类

        3.表单Form元素类

        4.HttpClient、MultipartFormDataContent扩展类

三、使用示例



一、简介

在HttpClient原生类的基础上,封装GET、POST、PUT、DELETE请求方法,简化客户端程序对RESTful API接口的调用。

二、源码

 1.HttpClientHelper帮助类

public class HttpClientHelper
    {
        #region GET 请求
        /// <summary>
        /// GET 请求
        /// </summary>
        /// <param name="url">地址</param>
        /// <param name="token">token</param>
        /// <returns></returns>
        public async static Task<string> GetStringAsync(string url, string token = null)
        {
            try
            {
                HttpClient httpClient = new HttpClient();
                httpClient.AddAuthorization(token);
                //Uri urlObj = new Uri(url);
                HttpResponseMessage response = await httpClient.GetAsync(url);
                string content = await response.Content.ReadAsStringAsync();
                return content;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return null;
            }
        }
        /// <summary>
        /// GET 请求,请求参数放在paramDic里,拼接成完整URL
        /// </summary>
        /// <param name="url"></param>
        /// <param name="paramDic"></param>
        /// <param name="token">token</param>
        /// <returns></returns>
        public async static Task<string> GetStringAsync(string url, Dictionary<string, string> paramDic, string token = null)
        {
            try
            {
                string _url = url + "?" + paramDic.ToQueryString();
                string content = await GetStringAsync(_url, token);
                return content;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return null;
            }
        }
        /// <summary>
        /// GET 请求
        /// </summary>
        /// <param name="url"></param>
        /// <param name="token">token</param>
        /// <returns></returns>
        public async static Task<byte[]> GetByteArrayAsync(string url, string token = null)
        {
            try
            {
                HttpClient httpClient = new HttpClient();
                httpClient.AddAuthorization(token);
                byte[] content = await httpClient.GetByteArrayAsync(url);
                return content;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return null;
            }
        }
        /// <summary>
        /// GET 请求,请求参数放在paramDic里,拼接成完整URL
        /// </summary>
        /// <param name="url"></param>
        /// <param name="paramDic"></param>
        /// <param name="token">token</param>
        /// <returns></returns>
        public async static Task<byte[]> GetByteArrayAsync(string url, Dictionary<string, string> paramDic, string token = null)
        {
            try
            {
                string _url = url + "?" + paramDic.ToQueryString();
                byte[] content = await GetByteArrayAsync(_url, token);
                return content;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return null;
            }
        }
        /// <summary>
        /// GET 请求
        /// </summary>
        /// <param name="url"></param>
        /// <param name="token">token</param>
        /// <returns></returns>
        public async static Task<T> GetObjectAsync<T>(string url, string token = null)
        {
            try
            {
         

网站文章

  • API拦截—实现Ring3全局HOOK

    魏滔序注:本转载内容仅用来技术研究,请勿于损人害己之用。 首先来解释一下这次的目标。由于windows的copy-on-write机制(Ring0下可以用CR0寄存器关掉它),Ring3下的HOOK只对当前进程有效,其他进程的API还是正常的。这就是说我们必须枚举进程,然后对每个Ring3进程执行一遍HOOK操作。但是,系统中总有新进程产生,对于这些新进程我们怎么处理

    2024-01-30 19:43:09
  • 北京工作三年程序员,2018年4~5月面试经历

    1、新东方 04_19 技术面试,两轮,地点:中关村地铁站E口,鼎好大厦6层, 面试官:龙彦俊,李经理 面试时间:2018_04_19_10:30(提前到了45分钟) 1、自我介绍 2、项目介绍 3、LiveChat项目,第一个 4、海南海航项目,第二个,最熟悉 5、技术: 数据库 mysql mysql如何做主从/主主复制的,java程序如何操作的? mysql主从...

    2024-01-30 19:43:01
  • spring boot 项目练习

    spring boot 项目练习

    spring boot官方文档:https://docs.spring.io/spring-boot/docs/current/reference/html/ 浏览器发送hello请求,服务器接受请求并处理,响应Hello World字符串; 1.创建一个maven工程 2.导入依赖 org.springframework.boot sprin

    2024-01-30 19:42:54
  • “注释: 爱恨交织的双重标准?解析注释在代码开发中的作用。”

    “注释: 爱恨交织的双重标准?解析注释在代码开发中的作用。”

    代码注释是程序员在开发过程中经常会遇到的问题之一。有些程序员认为注释非常必要,因为它们可以解释代码中的意图和功能。但是也有一些程序员不喜欢写注释,因为他们认为代码应该是自描述的,不应该需要注释来阐明自己的意图。不管是哪种立场,都有它的道理。在这篇文章中,我将探讨程序员对注释的看法,并分享我对于不写注释的程序员的看法。

    2024-01-30 19:42:25
  • 块级作用域和函数作用域

    块级作用域和函数作用域

    函数作用域与块级作用域 函数作用域:在函数内部声明的变量只能影响到变量所在函数体本身,无法从外部对函数内部的变量进行调用,被称为‘函数作用域’ 块级作用域:ES6 引入了 let 和 const 关键...

    2024-01-30 19:42:18
  • [AcWing] 148. 合并果子(C++实现)贪心---哈夫曼树例题

    [AcWing] 148. 合并果子(C++实现)贪心---哈夫曼树例题

    [AcWing] 148. 合并果子(C++实现)贪心---哈夫曼树例题1. 题目2. 读题(需要重点注意的东西)3. 解法4. 可能有帮助的前置习题5. 所用到的数据结构与算法思想6. 总结 1. ...

    2024-01-30 19:42:11
  • 计算机级C语言实例:使用C#编写的简单计算器

    然后,使用Console.ReadLine()函数接收用户输入的两个数字和运算符,并将它们转换为相应的数据类型。如有任何疑问,请随时提问。在本篇文章中,我们将使用C#编写一个简单的计算器应用程序。最后...

    2024-01-30 19:42:06
  • IL伪指令

    IL伪指令 在IL程序中,以“.”开头的指令代表是将要传输给汇编工具的指令,即伪指令。该指令要汇编工具执行某些具体操作。.assembly <程序集名称> {}//指明IL码属于那个程序集。.method 修饰符 返回值 名称(参数列表){...

    2024-01-30 19:41:26
  • 微型计算机usb接口通常串行,第一章-微型计算机组成题库.doc

    《第一章微型计算机组成概述》练习判断题1. 光盘是一种可读不可写的存储器。2. 显示器直接与PCI-E接口相连。3. 激光打印机使用的墨水质量很高。4.SRAM比DRAM速度慢。5.ROM是非易失性存...

    2024-01-30 19:41:19
  • 上海电力学院计算机辅助设计2,上海电力学院电路计算机辅助设计2--二端口电路的设计...

    上海电力学院计算机辅助设计2,上海电力学院电路计算机辅助设计2--二端口电路的设计...

    上海电力学院电路计算机辅助设计2--二端口电路的设计实验一:二端口电路的设计一、电路课程设计目的1、掌握二端口网络的基本概念和形成端口的条件。2、熟练掌握二端口网络的Y参数、Z参数、T参数方程,理解各...

    2024-01-30 19:41:11