示例代码:

 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. 创建一个python类 ,self init相关参数的简单介绍

    一 创建 ''' 一 使用python 语法 创建一个类, 探究self 是干啥的 1 创建一个对象 car 2 写入两个行参 3 定义两个方法 ''' class Car(): ''' 二 init ...

  2. Basler相机启动问题xml读取出错

    切记!同一张网卡上多网口分别连多相机的时候,不要用同一个网段!!很容易出错!

  3. TensorFlow 卷积神经网络实用指南 | iBooker·ApacheCN

    原文:Hands-On Convolutional Neural Networks with TensorFlow 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 不要担心自己的形象,只关心 ...

  4. Java 高效编程(Effective Java)中文第三版(补档)

    来源:sjsdfg/effective-java-3rd-chinese <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过, ...

  5. BootStrap基础入门概述总结

    是否还值得学习BootStrap 因为自己还是学生,自己在学习之前就先在网上看了看BootStrap是否在现在依旧流行,是否还值得学习. 以下是网友的一些评价: 20年11月 Bootstrap作为入 ...

  6. spring学习三:Spring Bean 生命周期

    Bean 的生命周期 理解 Spring bean 的生命周期很容易.当一个 bean 被实例化时,它可能需要执行一些初始化使它转换成可用状态.同样,当 bean 不再需要,并且从容器中移除时,可能需 ...

  7. js对于客户端的区分代码

    //区分设备 function judge_decice() { let ua =navigator.userAgent.toLowerCase(); if(/android|adr/gi.test( ...

  8. TCP三次握手和四次挥手【转】

    一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负责不同的通信功能.包含以下四个层次: 1. 链路层,也称作数据链路层或者网络接口层,通常包括操作系统中的设备驱动程 ...

  9. elasticsearch搜索引擎的常用方法

    1.term和termsterm和terms等查询,不会对查询对字段进行分词处理,适合于date.num.id等确切数据进行搜索 如果需要查询keywords,则查询等keywords必须是查询字段中 ...

  10. Appium链接夜神模拟器

    参考官方技术文档: http://appium.io/slate/cn/master/ 确保已经安装jdk和adt adb需要配置系统环境变量: D:\adt-bundle-windows-x86_6 ...