C#中请求HTTP接口api的方法

这篇具有很好参考价值的文章主要介绍了C#中请求HTTP接口api的方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂

C#中请求HTTP接口api的方法

前言

现在是:2023年2月15日22:14:30

搞代码的陈戌源都知道,哦,不好意思,是程序员,那个陈戌源好像是个“清官”…我们都知道,在java中调用api接口很简单,网上也有好多封装好的依赖,我们在项目中直接添加依赖,通过方法直接调用即可。
调用接口离不开传参,传参离不开json数据处理,java中也有线程的fastjson,想怎么用怎么用,但是在C#中调用接口确不大一样,今天我们就来看看在C#中如何调用api接口以及json数据的处理。

apipost中的接口

首先我们来看一下接口是啥样的。
C#中请求HTTP接口api的方法

该接口就是一个正常的post接口,请求的地址为:

http://127.0.0.1:8055/DaenWxHook/client/

请求时我们需要传入一个json数据的参数,如下:

{
    "type": "Q0000",
    "data": {
    }
}

请求返回的json数据如下所示:

{
	"code": 200,
	"msg": "正常",
	"result": {
		"startTimeStamp": "16762e14307",
		"startTime": "2023年2月12日23时5分7秒",
		"runTime": "1天9时33分13秒",
		"recv": 1859,
		"send": 15,
		"wxNum": "muxiongxiosnssg701xxxx",
		"nick": "X[emoji=05F5]\b",
		"wxid": "wxid_2sxs8edsw2glcgw522"
	},
	"wxid": "xxxxx",
	"port": 8055,
	"pid": 22820,
	"flag": "",
	"timestamp": "1676335100119"
}

C#中调用接口

  1. 新建一个工具类,这个工具类中就是专门负责请求接口的,包含postget方式,源代码如下:
using System;
using System.IO;
using System.Net;
using System.Text;

namespace Common
{
    public class Http
    {
        #region IIS服务地址
        public String HostUrl = "http://127.0.0.1:8055";//本地测试
        //public String HostUrl = "http://192.168.10.109:64111";//真实环境
        #endregion

        #region HttpPost提交
        public string HttpPost(string apiUrl, string postDataStr)
        {
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(HostUrl + "/" + apiUrl);
                request.Method = "POST";
                request.ContentType = "application/json";
                Stream requestStream = request.GetRequestStream();
                StreamWriter myStreamWriter = new StreamWriter(requestStream, Encoding.GetEncoding("utf-8"));
                myStreamWriter.Write(postDataStr);
                myStreamWriter.Flush();
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    Stream myResponseStream = response.GetResponseStream();
                    StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
                    string retString = myStreamReader.ReadToEnd();
                    myStreamReader.Close();
                    myResponseStream.Close();
                    return retString;
                }
                throw new Exception(response.StatusCode.ToString());
            }
            catch (Exception e)
            {
                Console.WriteLine("有异常了!");
                //Common.Logs.SaveLog("C:\\AlphaErrLog", "HTTP" + apiUrl, "HTTP[" + apiUrl + "]==Message:" + e.Message + "StackTrace:" + e.StackTrace);
                return "";
            }
        }
        #endregion

        #region HttpGet请求
        public string HttpGet(string Url)
        {
            string retString = "";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Method = "GET";
            try
            {
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream myResponseStream = response.GetResponseStream();
                //获取内容
                using (StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")))
                {
                    myStreamReader.ReadToEnd();
                    myStreamReader.Close();
                    myResponseStream.Close();
                }
                return retString;
            }
            catch (Exception)
            {
                throw;
            }
        }
        #endregion

        #region HttpPostForXML
        public string HttpPostForXML(string url, string postData)
        {
            string result = "";
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "POST";
            req.ContentType = "application/xml";
            req.Credentials = CredentialCache.DefaultCredentials; //防止出现403禁止访问
            byte[] data = Encoding.UTF8.GetBytes(postData);
            req.ContentLength = data.Length;
            using (Stream reqStream = req.GetRequestStream())
            {
                reqStream.Write(data, 0, data.Length);
                reqStream.Close();
            }
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            Stream stream = resp.GetResponseStream();
            using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
            {
                result = reader.ReadToEnd();
                return result;
            }
        }
        #endregion
    }
}

  1. 创建son格式化工具类JsonHelper

将对象序列化为JSON格式

/// <summary>
        /// 将对象序列化为JSON格式
        /// </summary>
        /// <param name="o">对象</param>
        /// <returns>json字符串</returns>
        public static string SerializeObject(object o)
        {
            var serializerSettings = new JsonSerializerSettings
            {
                // 设置为驼峰命名
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            };
            string json = Newtonsoft.Json.JsonConvert.SerializeObject(o,Formatting.None,serializerSettings);
            return json;
        }

解析JSON字符串生成对象实体

/// <summary>
        /// 解析JSON字符串生成对象实体
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="json">json字符串(eg.{"ID":"112","Name":"石子儿"})</param>
        /// <returns>对象实体</returns>
        public static T DeserializeJsonToObject<T>(string json) where T : class
        {
            Newtonsoft.Json.JsonSerializer serializer = new Newtonsoft.Json.JsonSerializer();
            StringReader sr = new StringReader(json);
            object o = serializer.Deserialize(new Newtonsoft.Json.JsonTextReader(sr), typeof(T));
            T t = o as T;
            return t;
        }

解析JSON数组生成对象实体集合

 /// <summary>
        /// 解析JSON数组生成对象实体集合
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="json">json数组字符串(eg.[{"ID":"112","Name":"石子儿"}])</param>
        /// <returns>对象实体集合</returns>
        public static List<T> DeserializeJsonToList<T>(string json) where T : class
        {
            Newtonsoft.Json.JsonSerializer serializer = new Newtonsoft.Json.JsonSerializer();
            StringReader sr = new StringReader(json);
            object o = serializer.Deserialize(new Newtonsoft.Json.JsonTextReader(sr), typeof(List<T>));
            List<T> list = o as List<T>;
            return list;
        }

反序列化JSON到给定的匿名对象

/// <summary>
        /// 反序列化JSON到给定的匿名对象.
        /// </summary>
        /// <typeparam name="T">匿名对象类型</typeparam>
        /// <param name="json">json字符串</param>
        /// <param name="anonymousTypeObject">匿名对象</param>
        /// <returns>匿名对象</returns>
        public static T DeserializeAnonymousType<T>(string json, T anonymousTypeObject)
        {
            T t = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject);
            return t;
        }

从本地文件加载,转为一个对象Model

/// <summary>
        /// 从本地文件加载,转为一个对象Model
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="path"></param>
        /// <returns></returns>
        public static T FileLoad<T>(string path)
        {
            try
            {
                StreamReader file = File.OpenText(path);
                Newtonsoft.Json.JsonTextReader reader = new Newtonsoft.Json.JsonTextReader(file);
                Newtonsoft.Json.JsonSerializer serializer = new Newtonsoft.Json.JsonSerializer();
                object o = serializer.Deserialize(reader, typeof(T));
                file.Close();
                return (T)o;
            }
            catch (Exception)
            {
                return default(T);
            }
        }

        public static T Copy<T>(T val)
        {
            string s = JsonHelper.SerializeObject(val);
            return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(s);
        }

        public static object DeserializeObject(string rawText, Type type)
        {
            return Newtonsoft.Json.JsonConvert.DeserializeObject(rawText, type);
        }

从本地文件加载,转为ModelList


/// <summary>
        /// 从本地文件加载,转为ModelList
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="path"></param>
        /// <returns></returns>
        public static List<T> FileLoadList<T>(string path) where T : class
        {
            StreamReader file = File.OpenText(path);
            Newtonsoft.Json.JsonTextReader reader = new Newtonsoft.Json.JsonTextReader(file);
            Newtonsoft.Json.JsonSerializer serializer = new Newtonsoft.Json.JsonSerializer();
            object o = serializer.Deserialize(reader, typeof(List<T>));
            file.Close();
            List<T> list = o as List<T>;
            return list;
        }

  1. 接下来我们看看如何调用,因为传参需要传递一个json格式的数据,所以我先用字典集合存放起来,然后格式化成json数据,传上去。

 private void Form1_Load(object sender, EventArgs e)
        {
            Dictionary<string, object> dic = new Dictionary<string, object>();
            dic.Add("type", "Q0000");
            string param = JsonHelper.SerializeObject(dic);
            Console.WriteLine("参数是:"+ param);
            string result = http.HttpPost(path, param);
            Console.WriteLine("请求结果是:"+result);

        }

data里面是空的也行,所以我就没有传。文章来源地址https://www.toymoban.com/news/detail-460786.html

到了这里,关于C#中请求HTTP接口api的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • UniApp实现API接口封装与请求方法的设计与开发方法

    UniApp实现API接口封装与请求方法的设计与开发方法 导语:UniApp是一个基于Vue.js的跨平台开发框架,可以同时开发iOS、Android和H5应用。在UniApp中,实现API接口封装与请求方法的设计与开发是一个十分重要的部分。本文将介绍如何使用UniApp实现API接口封装与请求方法的设计与开发

    2024年02月15日
    浏览(28)
  • HTTP POST接口带参数的HttpClient请求方法和调用

    接口自动化测试,今天遇到POST接口带参数,参数在url上,发现原来的工具类中没有该方法,重新调试加上。  doPost方法如下: 参考: [Java 接口自动化框架]httpclient4.5.3(CloseableHttpClient) https的工具类HttpsClientUtils

    2024年02月06日
    浏览(36)
  • 探究HTTP API接口测试:工具、方法与自动化

    本文将深入探讨HTTP API接口测试的重要性,并介绍了相关工具、方法以及自动化测试的实施,同时比较了HTTP和API接口测试的区别。从不同角度解析这一关键测试领域,帮助读者更好地理解和应用于实际项目中。 在如今数字化的世界中,软件开发和应用越来越离不开HTTP API接口

    2024年02月11日
    浏览(36)
  • 【接口】HTTP(3) |GET和POST两种基本请求方法有什么区别

    在我面试时,在我招人面试别人时,10次能遇到7次这个问题,我听过我也说回答过: Get: 一般对于从服务器取数据的请求可以设置为get方式 Get方式在传递参数的时候,一般都会把参数直接拼接在url上 Get请求方法可以传递的参数数据量是有限的(因为一般参数是拼接在url上,

    2024年04月12日
    浏览(35)
  • zlmediakit 新增可以使用硬件加速的转码http api接口方法

    根据项目需求,我们需要使用硬件解码的方式进行网络摄像头数据帧的解析,给到算法模块使用 1、通过ffmpeg命令实验,ffmpeg -i IPC_URL -f rtsp rtsp://*/live 该命令默认是使用cpu进行解码的,我们需要使用GPU进行解码。 2、ffmpeg硬件加速,这个需要安装相关的驱动,并且在编译ffmp

    2024年02月04日
    浏览(34)
  • java发送http请求的几种方式,调用第三方接口的方法:HttpUtil、HttpURLConnection等

    参考:https://blog.csdn.net/yubin1285570923/article/details/126225347 put请求 post带请求头 get、delete类似… 使用JDK原生提供的net,无需其他jar包,代码如下: 需要用到commons-httpclient-3.1.jar,maven依赖如下: 看一下我实际应用的例子 需要用到httpclient-4.5.6.jar,maven依赖如下: RestTemplate 是由

    2024年01月18日
    浏览(40)
  • 区块链技术交流群,欢迎大家进群交流

    欢迎区块链技术开发者和爱好者加入,大家可以在群内探讨区块链底层技术及区块链技术在各行各业的应用场景。 群内会分享区块链相关技术文档及区块链技术热点,并定期邀请区块链技术大佬进行线上直播,更好的帮助大家快速理解上手区块链技术。

    2024年02月15日
    浏览(53)
  • 最新验证的http: server gave HTTP response to HTTPS client解决方法,节约大家时间

    编辑/usr/lib/systemd/system/docker.service文件:在ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 后添加 –insecure-registry 192.168.43.199:8080 --ipv6=false

    2024年02月04日
    浏览(55)
  • C#——HTTP请求

    1、Get请求 使用HttpWebRequest进行Get请求: 使用HttpClient进行异步Get请求: 2、Post请求 使用HttpClient 进行异步的Post请求:  使用System.Net.HttpWebRequest的Post请求: 3、使用HttpWebRequest的Cookie的跨登录请求 登录获取Cookie: 使用登录取到的Cookie去访问接口: 读取HttpWebResponse 4、请求for

    2024年02月11日
    浏览(31)
  • Java实现方法接口入参同时包含文件、字段和对象等多种类型。HTTP请求返回415状态,Content type ‘application/octet-stream‘ not supported错误。

    方法一:对象不使用注解 使用Postman测试,直接将subject对象的字段填在key的位置 方法二:对象使用注解@RequestPart 使用Postman测试,将字段包装在subject对象里,使用Content type:application/json的内容类型 注:方法二在开发本地测试执行成功,但是在测试人员机子下不通过,执行报

    2024年02月12日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包