C# 请求在线接口数据
2023-09-27 14:26:40 时间
请求后台,有很多方式,常见的有WebRequest、HttpClient。以下mark一上~
WebRequest方式
1. Get
1 public static async Task<string> RequestDataAsync(string requestUrl) 2 { 3 WebRequest translationWebRequest = WebRequest.Create(requestUrl); 4 5 var response = await translationWebRequest.GetResponseAsync(); 6 7 using (Stream stream = response.GetResponseStream()) 8 { 9 using (StreamReader reader = new StreamReader(stream ?? throw new InvalidOperationException(), 10 Encoding.GetEncoding("utf-8"))) 11 { 12 string result = reader.ReadToEnd(); 13 var decodeResult = Unicode2String(result); 14 return decodeResult; 15 } 16 } 17 }
2. Post
1 /// <summary> 2 /// Post using WebRequest 3 /// </summary> 4 /// <param name="requestUrl"></param> 5 /// <param name="jsonData"></param> 6 /// <returns></returns> 7 public static async Task<string> PostDataAsync(string requestUrl,string jsonData) 8 { 9 WebRequest translationWebRequest = WebRequest.Create(requestUrl); 10 translationWebRequest.Method = "post"; 11 translationWebRequest.ContentType = "application/json"; 12 13 byte[] postdatabyte = Encoding.UTF8.GetBytes(jsonData); 14 translationWebRequest.ContentLength = postdatabyte.Length; 15 using (Stream postStream= translationWebRequest.GetRequestStream()) 16 { 17 postStream.Write(postdatabyte, 0, postdatabyte.Length); 18 } 19 20 var response = await translationWebRequest.GetResponseAsync(); 21 22 using (Stream responseStream = response.GetResponseStream()) 23 { 24 using (StreamReader reader = new StreamReader(responseStream ?? throw new InvalidOperationException(), 25 Encoding.GetEncoding("utf-8"))) 26 { 27 string result = reader.ReadToEnd(); 28 var decodeResult = Unicode2String(result); 29 return decodeResult; 30 } 31 } 32 }
HttpClient方式
1 /// <summary> 2 /// Post using HttpClient 3 /// </summary> 4 /// <param name="requestUrl"></param> 5 /// <param name="jsonData"></param> 6 /// <returns></returns> 7 public static async Task<string> PostDataUsingHttpAsync(string requestUrl, string jsonData) 8 { 9 HttpContent httpContent = new StringContent(jsonData); 10 httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 11 HttpClient httpClient = new HttpClient(); 12 HttpResponseMessage response = httpClient.PostAsync(requestUrl, httpContent).Result; 13 if (response.IsSuccessStatusCode) 14 { 15 Task<string> t = response.Content.ReadAsStringAsync(); 16 return t.Result; 17 } 18 return string.Empty; 19 }
拿走,不谢~
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class WebRequestBase 2 { 3 public static async Task<string> RequestDataAsync(string requestUrl) 4 { 5 WebRequest translationWebRequest = WebRequest.Create(requestUrl); 6 7 var response = await translationWebRequest.GetResponseAsync(); 8 9 using (Stream stream = response.GetResponseStream()) 10 { 11 using (StreamReader reader = new StreamReader(stream ?? throw new InvalidOperationException(), 12 Encoding.GetEncoding("utf-8"))) 13 { 14 string result = reader.ReadToEnd(); 15 var decodeResult = Unicode2String(result); 16 return decodeResult; 17 } 18 } 19 } 20 21 /// <summary> 22 /// Post using WebRequest 23 /// </summary> 24 /// <param name="requestUrl"></param> 25 /// <param name="jsonData"></param> 26 /// <returns></returns> 27 public static async Task<string> PostDataAsync(string requestUrl, string jsonData) 28 { 29 WebRequest translationWebRequest = WebRequest.Create(requestUrl); 30 translationWebRequest.Method = "post"; 31 translationWebRequest.ContentType = "application/json"; 32 33 byte[] postdatabyte = Encoding.UTF8.GetBytes(jsonData); 34 translationWebRequest.ContentLength = postdatabyte.Length; 35 using (Stream postStream = translationWebRequest.GetRequestStream()) 36 { 37 postStream.Write(postdatabyte, 0, postdatabyte.Length); 38 } 39 40 var response = await translationWebRequest.GetResponseAsync(); 41 42 using (Stream responseStream = response.GetResponseStream()) 43 { 44 using (StreamReader reader = new StreamReader(responseStream ?? throw new InvalidOperationException(), 45 Encoding.GetEncoding("utf-8"))) 46 { 47 string result = reader.ReadToEnd(); 48 var decodeResult = Unicode2String(result); 49 return decodeResult; 50 } 51 } 52 } 53 54 /// <summary> 55 /// Post using HttpClient 56 /// </summary> 57 /// <param name="requestUrl"></param> 58 /// <param name="jsonData"></param> 59 /// <returns></returns> 60 public static async Task<string> PostDataUsingHttpAsync(string requestUrl, string jsonData) 61 { 62 HttpContent httpContent = new StringContent(jsonData); 63 httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 64 HttpClient httpClient = new HttpClient(); 65 HttpResponseMessage response = httpClient.PostAsync(requestUrl, httpContent).Result; 66 if (response.IsSuccessStatusCode) 67 { 68 Task<string> t = response.Content.ReadAsStringAsync(); 69 return t.Result; 70 } 71 return string.Empty; 72 } 73 74 /// <summary> 75 /// Unicode转字符串 76 /// </summary> 77 /// <param name="source">经过Unicode编码的字符串</param> 78 /// <returns>正常字符串</returns> 79 protected static string Unicode2String(string source) 80 { 81 return new Regex(@"\\u([0-9A-F]{4})", RegexOptions.IgnoreCase | RegexOptions.Compiled).Replace( 82 source, x => string.Empty + Convert.ToChar(Convert.ToUInt16(x.Result("$1"), 16))); 83 } 84 }
相关文章
- What is the yield keyword used for in C#?
- 详解C#泛型(二) 获取C#中方法的执行时间及其代码注入 详解C#泛型(一) 详解C#委托和事件(二) 详解C#特性和反射(四) 记一次.net core调用SOAP接口遇到的问题 C# WebRequest.Create 锚点“#”字符问题 根据内容来产生一个二维码
- .net 反射访问私有变量和私有方法 如何创建C# Closure ? C# 批量生成随机密码,必须包含数字和字母,并用加密算法加密 C#中的foreach和yield 数组为什么可以使用linq查询 C#中的 具名参数 和 可选参数 显示实现接口 异步CTP(Async CTP)为什么那样工作? C#多线程基础,适合新手了解 C#加快Bitmap的访问速度 C#实现对图片文件的压
- C#中泛型方法与泛型接口 C#泛型接口 List<IAll> arssr = new List<IAll>(); interface IPerson<T> c# List<接口>小技巧 泛型接口协变逆变的几个问题
- 装饰者模式的学习(c#) EF SaveChanges() 报错(转载) C# 四舍五入 保留两位小数(转载) DataGridView样式生成器使用说明 MSSQL如何将查询结果拼接成字符串 快递查询 C# 通过smtp直接发送邮件 C# 带参访问接口,WebClient方式 C# 发送手机短信 文件 日志 写入 与读取
- WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化
- api 和 C# 里的接口的区别?
- c# 调试模式下Swaggerf附加接口参数
- c#接口interface学习
- C# 【中级篇】IComparable接口的使用
- c#调用c++的dll
- C#中的继承与多态还有接口
- C# 接口
- 静态构造函数c# 静态块java initallize oc
- 用c#开发微信 (10) JS-SDK 基本用法- 分享接口“发送到朋友”
- 《敏捷软件开发:原则、模式与实践(C#版.修订版)》一1.4 参考文献
- C#/Asp.Net 获取各种Url的方法
- c#的显性转换,和隐形转换相关细节
- c#访问http接口的"编码"问题
- C# 中的接口和密封类
- C#Winform频繁刷新导致界面闪烁解决方法
- C#中实现对象的深拷贝
- 接口 C# 请求数据 模拟多线程下载文件
- 接口 C# 请求数据 使用post的方式提交raw格式的数据,数据为json格式,多层嵌套
- C# 计算接口调用时长