示例代码:

 1 using System.Net.Http;
2 using System.Net.Http.Headers;
3 using System.Threading.Tasks;
4
5 namespace MachineServer
6 {
7 public static class HttpHelper
8 {
9 public static HttpClient HttpClient { get; set; }
10
11 public static void InitializeClient()
12 {
13 //单例模式
14 if (HttpClient == null)
15 {
16 HttpClient = new HttpClient();
17 }
18
19 HttpClient.DefaultRequestHeaders.Accept.Clear();
20 HttpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
21
22 //能解读https类型
23 //ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
24 }
25
26 /// <summary>
27 /// Get方法
28 /// </summary>
29 /// <param name="url">目标链接(含参数)</param>
30 /// <returns>返回的字符串</returns>
31 public static async Task<string> GetAsync(string url)
32 {
33 using (HttpResponseMessage response = await HttpClient.GetAsync(url))
34 {
35 response.EnsureSuccessStatusCode();
36 string result = await response.Content.ReadAsStringAsync();
37 return result;
38 }
39 }
40
41 /// <summary>
42 /// Post方法
43 /// </summary>
44 /// <param name="url">目标链接</param>
45 /// <param name="json">发送的json格式的参数字符串</param>
46 /// <returns>返回的字符串</returns>
47 public static async Task<string> PostAsync(string url, string json)
48 {
49 StringContent content = new StringContent(json);
50 content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
51
52 using (HttpResponseMessage response = await HttpClient.PostAsync(url, content))
53 {
54 response.EnsureSuccessStatusCode();
55 string result = await response.Content.ReadAsStringAsync();
56 return result;
57 }
58 }
59
60 /// <summary>
61 /// Post方法
62 /// </summary>
63 /// <param name="url">目标链接</param>
64 /// <param name="json">发送的json格式的参数字符串</param>
65 /// <returns>返回的字符串</returns>
66 public static async Task<string> PostAsync(string url, HttpContent content)
67 {
68 //HttpContent content = new FormUrlEncodedContent(new Dictionary<string, string>()
69 // {
70 // { "token", token},
71 // { "orderNo", orderNo}
72 // });
73 content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded") { CharSet = "utf-8" };
74
75 using (HttpResponseMessage response = await HttpClient.PostAsync(url, content))
76 {
77 response.EnsureSuccessStatusCode();
78 string result = await response.Content.ReadAsStringAsync();
79 return result;
80 }
81 }
82 }
83 }

Get方法

get方法传递参数,是将参数及其值直接跟在url后面,以?开始,中间用&间隔,类似:

string tokenString = await HttpHelper.GetAsync($"https://er.com/Apps/Mes/getToken?appKey=11&nonce=22&timestamp=33&signature=44");

Post方法

post方法传递参数有几种形式,需要看HTTP服务端那边支持哪种,客户端用时,需要将Header的ContentType设置正确。

总结以下三种:

1. json格式:

content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

对应Postman中:

2. form-data格式:

content.Headers.Remove("Content-Type");
content.Headers.TryAddWithoutValidation("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundarypy5dIaqJBcHjn7sv");

对应Postman中:

3. x-www-form-urlencoded格式:

content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded") { CharSet = "utf-8" };

对应Postman中:

已测试Post方法的x-www-form-urlencoded方式使用成功

C# HttpClient类库的更多相关文章

  1. HttpClient 4.5.x 工具类设计与实现

    最近,业务需要在java服务端发起http请求,需要实现"GET","POST","PUT"等基本方法.于是想以 "HttpCli ...

  2. HttpClient请求服务器代码优化版

    HttpClient请求服务器代码优化版 首先,我在前面的两篇博文中介绍了在 Android中,除了使用java.net包下HttpUrlConnection的API访问HTTP服务之外,我们还可以换 ...

  3. Android使用HttpClient请求服务器代码优化版

    首先,我在前面的两篇博文中介绍了在Android中,除了使用java.net包下HttpUrlConnection的API访问HTTP服务之外,我们还可以换一种途径去完成工作.Android SDK附 ...

  4. JAVA发送HttpClient

    http://bijian1013.iteye.com/blog/2310211 在发送HTTP请求的时候会使用到POST和GET两种方式,如果是传送普通的表单数据,我们直接将参数到一个Key-val ...

  5. Excel催化剂开源第41波-网抓网络采集类库及工具分享

    在VBA开发网抓程序中,会用到xmlhttp/winHttp.winHttprequest.5.1等组件,当时笔者也是这样进入了网抓领域的,这些都是非常过时的东西,在.Net的开发中,有大量的更好用的 ...

  6. Spring Boot 中使用 HttpClient 进行 POST GET PUT DELETE

    有的时候,我们的 Spring Boot 应用需要调用第三方接口,这个接口可能是 Http协议.可能是 WebService.可能是 FTP或其他格式,本章讨论 Http 接口的调用. 通常基于 Ht ...

  7. 第一个web框架tornado

    简介 tornado,是我学到的第一个web框架是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google ...

  8. Android开源库--Asynchronous Http Client异步http客户端

    如果说我比别人看得更远些,那是因为我站在了巨人的肩上. github地址:https://github.com/loopj/android-async-http Api文档地址:http://loop ...

  9. Android中使用HTTP服务

    在Android中,除了使用java.net包下的API访问HTTP服务之外,我们还可以换一种途径去完成工作.Android SDK附带了Apache的HttpClient API.Apache Ht ...

随机推荐

  1. Linux下的5种I/O模型与3组I/O复用

    引言 上一篇文章中介绍了一些无缓冲文件I/O函数,但应该什么时机调用这些函数,调用这些I/O函数时进程和内核的行为如何,如何高效率地实现I/O?这篇文章就来谈一谈Linux下的5种I/O模型,以及高性 ...

  2. String Reversal

    Educational Codeforces Round 96 (Rated for Div. 2) - E. String Reversal 跳转链接 题目描述 定义一个操作为交换字符串中相邻的两个 ...

  3. Uwl.Admin.Core开源框架(二) 使用QuartzNet

    Uwl.Admin.Core中使用QuartzNet定时任务模块: 本文负责讲解RabbitMQ的使用 Uwl.Admin.Core使用的技术有: *.Async和Await 异步编程 *.Repos ...

  4. uniapp自定义顶部搜索框兼容微信小程序

    zhuanzai:  uniapp自定义顶部搜索框兼容微信小程序 自定义组件 navbarvue (胶囊底部高度 - 状态栏的高度) + (胶囊顶部高度 - 状态栏内的高度) = 导航栏的高度 < ...

  5. Linux下Wordpress忘记密码后的解决方法

    进入Wordpress的数据库,找到wp_users表,使用MD5('你的密码')函数添加密码 示例: 修改admin的密码为123456 UPDATE wp_users SET user_pass= ...

  6. Pytorch技法:继承Subset类完成自定义数据拆分

    我们在<torch.utils.data.DataLoader与迭代器转换>中介绍了如何使用Pytorch内置的数据集进行论文实现,如torchvision.datasets.下面是加载内 ...

  7. Diary -「NOI 2021」酱油记

    雨幕浓稠 远近一白 是水雾弥漫的天 还是泡沫撑起的海   雨真大呢.   前几天去 ZH 中学集训没啥好记的,就从会合日开始叭. [Day -1]   逃出 ZH,掉入梦麟.(   高中的同学们忘记带 ...

  8. Solution -「BZOJ #3786」星系探索

    \(\mathcal{Description}\)   Link.   给定一棵含 \(n\) 个点的有根树,点有点权,支持 \(q\) 次操作: 询问 \(u\) 到根的点权和: 修改 \(u\) ...

  9. Solution -「CF 1342E」Placing Rooks

    \(\mathcal{Description}\)   Link.   在一个 \(n\times n\) 的国际象棋棋盘上摆 \(n\) 个车,求满足: 所有格子都可以被攻击到. 恰好存在 \(k\ ...

  10. Dubbo源码剖析三之服务注册过程分析

    Dubbo源码剖析二之注册中心 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中对注册中心进行了简单的介绍,对Dubbo整合Zookeeper链接源码进行了详细分析.本文接着对服务注册过 ...