C# API POST与GET的调用

WebClient与HttpWebRequest HttpClient没测试

WebClient与HttpWebRequest还有HttpClient的区别

继承关系

Object --> MarshalByRefObject --> Component --> WebClient
提供用于将数据发送到由 URI 标识的资源及从这样的资源接收数据的常用方法。

Object --> MarshalByRefObject --> WebRequest --> HttpWebRequest
提供 WebRequest 类的 HTTP 特定的实现。

Object --> HttpMessageInvoker --> HttpClient
用于发送 HTTP 请求并从 URI 标识的资源接收 HTTP 响应。

从继承关系上来看 WebClient要比HttpWebRequest要高一层,HttpClient和其他两个基本关系不大
从介绍上来看 HttpClient是针对Http的请求,而其他两个是针对URI的资源请求和接收

使用关系

WebClient是一种更高级别的抽象,是HttpWebRequest为了简化最常见任务而创建的,使用过程中你会发现他缺少基本的header,timeoust的设置,不过这些可以通过继承httpwebrequest来实现。相对来说,WebClient比WebRequest更加简单,它相当于封装了request和response方法,不过需要说明的是,Webclient和WebRequest继承的是不同类,两者在继承上没有任何关系。使用WebClient可能比HttpWebRequest直接使用更慢(大约几毫秒),但却更为简单,减少了很多细节,代码量也比较少。

HttpWebRequest 这是.NET创建者最初开发用于使用HTTP请求的标准类。使用HttpWebRequest可以让开发者控制请求/响应流程的各个方面,如 timeouts, cookies, headers, protocols。另一个好处是HttpWebRequest类不会阻塞UI线程。例如,当您从响应很慢的API服务器下载大文件时,您的应用程序的UI不会停止响应。HttpWebRequest通常和WebResponse一起使用,一个发送请求,一个获取数据。HttpWebRquest更为底层一些,能够对整个访问过程有个直观的认识,但同时也更加复杂一些。

HttpClient是.NET4.5引入的一个HTTP客户端库,其命名空间为 System.Net.Http ,.NET 4.5之前我们可能使用WebClient和HttpWebRequest来达到相同目的。HttpClient利用了最新的面向任务模式,使得处理异步请求非常容易。它适合用于多次请求操作,一般设置好默认头部后,可以进行重复多次的请求,基本上用一个实例可以提交任何的HTTP请求。HttpClient有预热机制,第一次进行访问时比较慢,所以不应该用到HttpClient就new一个出来,应该使用单例或其他方式获取HttpClient的实例.

代码示例

namespace API读取写入程序
{public class HttpHelper{/// <summary>/// 使用 POST 方法将指定的字符串上载到指定的资源/// </summary>/// <param name="address">接收字符串的资源的 URI</param>/// <param name="data">上载的字符串</param>/// <returns></returns>public static string Post_WebClient(string address, string data = ""){//初始化配置WebClient client = new WebClient();client.Headers[HttpRequestHeader.ContentType] = "application/json";client.Headers.Add("Channel", "1102");//添加防止乱码client.Encoding = Encoding.UTF8;string result = client.UploadString(address, data);//返回数据return result;}/// <summary>///  使用 GET 方法下载请求的资源/// </summary>/// <param name="address">要下载的 URI 的数据</param>/// <returns></returns>public static string Get_WebClient(string address){//初始化配置WebClient client = new WebClient();//添加防止乱码client.Encoding = Encoding.UTF8;string result = client.DownloadString(address);//返回数据return result;}/// <summary>/// 带超时的Post发送Json,实现超时重发,启用接口日志/// </summary>/// <param name="address">地址</param>/// <param name="data">Json字符串</param>/// <param name="encoding">编码类型</param>/// <param name="timeout">超时时间</param>/// <returns></returns>public static string Post_HttpWebRequest(string address, string data, Encoding encoding, int timeout){//初始化配置HttpWebRequest tmpRequest = (HttpWebRequest)WebRequest.Create(address);tmpRequest.Method = "POST";tmpRequest.KeepAlive = false;tmpRequest.Timeout = timeout;tmpRequest.ContentType = "application/json";byte[] tmpBts = encoding.GetBytes(data);tmpRequest.ContentLength = tmpBts.Length;//提交数据Stream tmpRequestStream = tmpRequest.GetRequestStream();tmpRequestStream.Write(tmpBts, 0, tmpBts.Length);tmpRequestStream.Flush();//接收数据  HttpWebResponse tmpResponse = (HttpWebResponse)tmpRequest.GetResponse();Stream tmpResponseStream = tmpResponse.GetResponseStream();StreamReader tmpStreamReader = new StreamReader(tmpResponseStream, encoding);string retString = tmpStreamReader.ReadToEnd();//关闭tmpStreamReader.Close();tmpResponseStream.Close();tmpRequestStream.Close();//返回数据return retString;}internal static string Post_WebClient(string servPath, object value){throw new NotImplementedException();}}public interface IBusiness{public (bool bResult, string strErrMsg) Login(string account, string password);}public class Business : IBusiness{public (bool bResult, string strErrMsg) Login(string username, string password){try{//定义传输的jsonJObject jo = new JObject();jo.Add("channel", channel);jo.Add("libCode", libCode);jo.Add("number", number);jo.Add("totalNum", totalNum);string servPath = @$"http://192.168.1.253:7072/platform/token/login";//API操作string result = HttpHelper.Post_WebClient(servPath, jo.ToString());jo = JObject.Parse(result);bool bRes = (bool)jo["success"];//返回值 赋值与操作if (bRes){if (string.IsNullOrEmpty(jo["data"].ToString())){}}return (bRes, jo["message"].ToString());}catch (Exception ex){return (false, ex.Message);}}}
}

总结

以上就是这次的总结了,后面在进行整理.

2022/11/1

C# API POST与GET的调用相关推荐

  1. python实现简单的api接口-简单实现Python调用有道API接口(最新的)

    # ''' # Created on 2018-5-26 # # @author: yaoshuangqi # ''' import urllib.request import urllib.pars ...

  2. php新浪api,php调用新浪短链接API的方法,php调用新浪api_PHP教程

    php调用新浪短链接API的方法,php调用新浪api 本文实例讲述了php调用新浪短链接API的方法.分享给大家供大家参考.具体方法如下: 复制代码 代码如下: //Sina App_Key def ...

  3. 百度地图api卫星地球模式的调用

    百度地图api卫星地球模式的调用 调用百度地图api 注意事项 调用百度地图api 下面是百度地图官方给的调用实例 <!DOCTYPE html> <html> <hea ...

  4. 淘宝网及新浪网等几大官方IP查询API接口地址库的调用及使用方法教程

    淘宝对外提供共享的一个IP地址库API,更新也比较及时,非常适合我们日常的使用. 以下讨论的是和淘宝网 IP查询 地址库 调用 API 相关的淘宝网及新浪网等几大官方IP查询API接口地址库的调用及使 ...

  5. 操作系统原理,系统调用,系统调用与库函数API等函数之间的调用关系,功能与机制设计,系统调用的执行过程与Linux系统调用执行示例,不同操作系统下的PCB

    操作系统原理,系统调用,功能与机制设计,系统调用的执行过程与Linux系统调用执行示例,不同操作系统下的PCB 一.系统调用:操作系统功能调用,用户在编程时可以调用的操作系统功能. 1.系统调用是操作 ...

  6. Arcgis api for js 3.x调用浙江省天地图

    Arcgis api for js 3.x调用浙江省天地图 代码 坑点 代码 参照浙江天地图的调用说明http://www.zjditu.cn/resource/apihelp,编写代码调用地wmts ...

  7. android利用反射调用截屏api,Android利用反射机制调用截屏方法和获取屏幕宽高的方法...

    想要在应用中进行截屏,可以直接调用 View 的 getDrawingCache 方法,但是这个方法截图的话是没有状态栏的,想要整屏截图就要自己来实现了. 还有一个方法可以调用系统隐藏的 screen ...

  8. 使用基于 WebRTC 的 JavaScript API 在浏览器环境里调用本机摄像头

    HTML5,JavaScript 和现代浏览器这套三驾马车的组合,使得传统的 Web 应用较之过去能实现更多更丰富的同用户交互的功能.摄像头如今已成为智能手机的标配,前端 Web 应用也出现了越来越多 ...

  9. Flink的Table API 与SQL介绍及调用

    1 概述    DataSetAPI和DateStreamAPI是基于整个Flink的运行时环境做操作处理的,Table API和SQL是在DateStreamAPI上又包了一层.对于新版本的Blin ...

最新文章

  1. babylonjs 分部加载模型_使用 Babylon.js 在 HTML 页面加载 3D 对象
  2. python——输入输出
  3. Python CSV 中查找指定字符串
  4. LOJ:出纳员问题(差分约束)
  5. 23种设计模式之命令模式
  6. webservice使用EF生成的model序列化问题
  7. 在浏览器里友好的变量输出查看函数方法
  8. 16年的大数据经验,为了搞定数字化转型,我和老板做了个赌注
  9. JSLint突然报告:使用“使用严格”功能形式
  10. 在线文本代码对比工具
  11. protel PCB负片绘法--提高雕刻速度
  12. centos桌面系统怎么退回终端系统_CentOS下命令行和桌面模式的切换方法
  13. PAT-ADVANCED1118——Birds in Forest
  14. 阿里云基础认证(ACA - Alibaba Cloud Certification Associate)
  15. 三、道阻且长之单例模式
  16. MyBatis----回顾mybatis自定义和环境搭建+完善自定义Mybatis的注解开发
  17. MYSQL8.0远程连接出现1045错误(Linux)
  18. 哈工大操作系统课程实验记录
  19. queen mary java_机器学习网站
  20. 程序设计与C语言引论笔记——字符数组与字符串

热门文章

  1. 一元稀疏多项式加减法计算器
  2. [模集]基于运放与模集设计-公式完全推导
  3. 【三角形判断】测试用例设计
  4. 菜鸟的springboot项目图片上传及图片路径分析
  5. implicitly has an ‘any‘ type...以及suppressImplicitAnyIndexErrors版本错误TypeScript 5.5问题
  6. 计算机领域中的CAE,什么是CAE?
  7. 彻底弄清补码加减法运算,正数、负数位移运算原理
  8. for(auto a :b)
  9. idc机房建设费用_成立一个IDC机房要多少钱
  10. HTML2游戏——绿林怪盗