当前位置: 首页 > article >正文

C#后台发送Get和Post请求的几种方法总结

本文主要介绍分别通过HttpClient、Flurl.Http、WebRequest和WebClient发送Get和Post请求的方法。

1、通过HttpClient发送Get和Post请求

适用平台:.NET Framework 4.5+, .NET Standard 1.1+, .NET Core 1.0+

其它平台的移植版本可以通过Nuget来安装。

命名空间:using System.Net.Http;

HttpClient推荐使用单一实例共享使用,发关请求的方法推荐使用异步的方式,代码如下,

private static readonly HttpClient client = new HttpClient();
//发送Get请求
var responseString = await client.GetStringAsync("http://www.example.com/recepticle.aspx");
//发送Post请求
var values = new Dictionary
{
   { "thing1", "hello" },
   { "thing2", "world" }
};
var content = new FormUrlEncodedContent(values);
var response = await client.PostAsync("http://www.example.com/recepticle.aspx", content);
var responseString = await response.Content.ReadAsStringAsync();

2、通过第三方类库发送Get和Post请求

1)Flurl.Http(可以通过Nuget来安装)

命名空间:using Flurl.Http;

//发送Get请求
var responseString = await "http://www.example.com/recepticle.aspx"
    .GetStringAsync();
//发送Post请求
var responseString = await "http://www.example.com/recepticle.aspx"
    .PostUrlEncodedAsync(new { thing1 = "hello", thing2 = "world" })
    .ReceiveString();

2)RestSharp(可以通过Nuget来安装)

//发送Get和Post请求
 RestClient client = new RestClient("http://example.com");//指定请求的url
 RestRequest req = new RestRequest("resource/{id}", Method.GET);//指定请求的方式,如果Post则改成Method.POST
request.AddParameter("name", "value"); // 添加参数到 URL querystring
request.AddUrlSegment("id", "123"); // 替换上面指定请求方式中的{id}参数
//req.AddBody(body); /*如发送post请求,则用req.AddBody()指定body内容*/
//发送请求得到请求的内容
//如果有header可以使用下面方法添加
//request.AddHeader("header", "value");
IRestResponse response = client.Execute(request);
//上传一个文件
//request.AddFile("file", path);
var content = response.Content; // 未处理的content是string
//还可以下面几种方式发送请求
//发送请求,反序列化请求结果
IRestResponse response2 = client.Execute(request);
var name = response2.Data.Name;
//发送请求下载一个文件,并保存到path路径
client.DownloadData(request).SaveAs(path);
// 简单发送异步请求
await client.ExecuteAsync(request);
// 发送异常请求并且反序列化结果
var asyncHandle = client.ExecuteAsync(request, response => {
    Console.WriteLine(response.Data.Name);
});
//终止异步的请求
asyncHandle.Abort();

3、比较老一点的方法通过WebRequest发送请求

适用平台:.NET Framework 1.1+, .NET Standard 2.0+, .NET Core 1.0+

命名空间:
using System.Net;
using System.Text;  // for class Encoding
using System.IO;    // for StreamReader

//发送Get请求
var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
//发送Post请求
var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");
var postData = "thing1=hello";
    postData += "&thing2=world";
var data = Encoding.ASCII.GetBytes(postData);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
using (var stream = request.GetRequestStream())
{
    stream.Write(data, 0, data.Length);
}
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

4、通过WebClient的方式发送请求

适用平台:.NET Framework 1.1+, .NET Standard 2.0+, .NET Core 2.0+

命名空间:
using System.Net;
using System.Collections.Specialized;

using System.Net;
using System.Collections.Specialized;
//发送Get请求
 string url = string.Format("http://localhost:28450/api/values?p1=a&p2=b");
 using (var wc = new WebClient())
{
 Encoding enc = Encoding.GetEncoding("UTF-8");
 Byte[] pageData = wc.DownloadData(url);
 string re = enc.GetString(pageData);
}
//发送Post请求
using (var client = new WebClient())
{
    var values = new NameValueCollection();
    values["thing1"] = "hello";
    values["thing2"] = "world";
    var response = client.UploadValues("http://www.example.com/recepticle.aspx", values);
    var responseString = Encoding.Default.GetString(response);
}


http://www.kler.cn/a/154883.html

相关文章:

  • 如何实现主备租户的无缝切换 | OceanBase应用实践
  • 【卡尔曼滤波】数据融合Fusion的应用 C语言、Python实现(Kalman Filter)
  • SSE与WebSocket与MQTT
  • k8s笔记——核心概念
  • LeetCode59. 螺旋矩阵 II
  • Vue 组件通信及进阶语法
  • HCIP-十六、IGMPPIM-SM 组播
  • 力扣题:字符串的反转-11.22
  • 论文解读--Visual Lane Tracking and Prediction for Autonomous Vehicles
  • 编程实战:类C语法的编译型脚本解释器(四)
  • 部署 Draw.io 思维导图工具
  • python安装与配置:在centos上使用shell脚本一键安装
  • 服务端突然断电
  • 食物相关的深度学习数据集合集—食物、饮料、肉类、餐具等数据集
  • 基于Amazon Bedrock的企业级生成式AI平台
  • SQL Server 2016(创建数据库)
  • 讲解机器学习中的 K-均值聚类算法及其优缺点。
  • C语言之结构体
  • 力扣labuladong——一刷day63
  • selenium+python
  • 深度学习常见回归分支算法逐步分析,各种回归之间的优缺点,适用场景,举例演示
  • Linux 定时关机 crontab
  • ES-ELSER 如何在内网中离线导入ES官方的稀疏向量模型(国内网络环境下操作方法)
  • 五、ZooKeeper的shell操作
  • AD7124-4 实测热电偶数据读取,电压精度到稳定到±1uV, 电压波动260nV, 温度精度到±0.01℃
  • ChatGPT成为“帮凶”:生成虚假数据集支持未知科学假设