NET问答: C# 中有哪些 HttpPost 工具包
咨询区
Hooch:
我会用 GET Request
,但如何使用 Post Request
还得请教大家。
回答区
Evan Mulawski:
有多种方式可以使用 Http 的 GET 和 Post 请求。
A方法:HttpClient (推荐)
HttpClient 可用于 .NET Framework 4.5+
, .NET Standard 1.1+
,.NET Core 1.0+
,当前是最值得推荐的方式,它支持异步并且高性能,如果你是非常老的平台,还得需要从 Nuget 上安装一下 System.Net.Http
。
HttpClient 推荐的做法就是在应用程序生命周期内初始化一次,除非你有特殊的理由不这么做,使用方法如下:
private static readonly HttpClient client = new HttpClient();
POST 方式
var values = new Dictionary<string, string>
{{ "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();
GET
var responseString = await client.GetStringAsync("http://www.example.com/recepticle.aspx");
B方法:第三方包
RestSharp
POST
var client = new RestClient("http://example.com");// client.Authenticator = new HttpBasicAuthenticator(username, password);var request = new RestRequest("resource/{id}");request.AddParameter("thing1", "Hello");request.AddParameter("thing2", "world");request.AddHeader("header", "value");request.AddFile("file", path);var response = client.Post(request);var content = response.Content; // Raw content as stringvar response2 = client.Post<Person>(request);var name = response2.Data.Name;
Flurl.Http
这是一个比较新的工具包,拥有便捷易用的 API 接口,底层使用的是 HttpClient,而且支持移植,可以在 Nuget 上获取。
POST
var responseString = await "http://www.example.com/recepticle.aspx".PostUrlEncodedAsync(new { thing1 = "hello", thing2 = "world" }).ReceiveString();
GET
var responseString = await "http://www.example.com/recepticle.aspx".GetStringAsync();
C方法:HttpWebRequest (不推荐)
它可用于 .NET Framework 1.1+
, .NET Standard 2.0+
,.NET Core 1.0+
,在 .netcore 中仅仅是为了兼容而存在的,它封装了 HttpClient,性能较差,也没有提供什么新功能。
POST
var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");var postData = "thing1=" + Uri.EscapeDataString("hello");postData += "&thing2=" + Uri.EscapeDataString("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();
GET
var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");var response = (HttpWebResponse)request.GetResponse();var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
D方法:WebClient (不推荐)
WebClient 封装了 HttpWebRequest,在 .NET Framework 1.1+
,NET Standard 2.0+
,.NET Core 2.0+
中可用。
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);
}
GET
using (var client = new WebClient())
{var responseString = client.DownloadString("http://www.example.com/recepticle.aspx");
}
点评区
Evan Mulawski
大佬提到了 5 种方式,非常全面,值得学习了解,有一点要注意,在 .net core 2.1
种提供了一个新的 HttpClientFacotry
类,就就是用来解决 HttpClient 的各种不足,有兴趣可以看下 MSDN:https://docs.microsoft.com/en-us/dotnet/architecture/microservices/implement-resilient-applications/use-httpclientfactory-to-implement-resilient-http-requests#what-is-httpclientfactory
原文链接:https://stackoverflow.com/questions/4015324/how-to-make-an-http-post-web-request
NET问答: C# 中有哪些 HttpPost 工具包相关推荐
- NET问答: JS 中有 LINQ SelectMany 方法的等价实现吗?
咨询区 toddmo: 很遗憾,我在 Underscore 和 Jquery 中都没有找到对等实现,我的要求很简单,只要能做到 IE9 兼容即可. 我的 SelectMany 实现如下: // Sel ...
- 知识图谱问答的实践技术分享的书面版本
公众号 系统之神与我同在 编者按:随着互联网软硬件相关技术的飞速发展,人们逐渐从信息时代进入智能时代.知识图谱作为承载底层海量知识并支持上层智能应用的重要载体,在智能时代中扮演了极其重要的角色.而利用 ...
- 如何用Octave工具包
如何用Octave工具包 如何在Octave中安装工具包(类似matlab中的工具箱),Octave中有专门的工具包分享站点: Octave工具包站点:https://octave.sourcefor ...
- 全网首译 : 初学者终极指南—掌握Scrum敏捷框架—第1章
原书信息如下 Name: The Ultimate Beginner's Guide To Learn And Master Scrum Agile Framework Author: HEIN SM ...
- Flask的上下文管理机制
前引 在了解flask上下文管理机制之前,先来一波必知必会的知识点. 面向对象双下方法 首先,先来聊一聊面向对象中的一些特殊的双下划线方法,比如__call__.__getattr__系列.__get ...
- flask 上下文管理
前引 在了解flask上下文管理机制之前,先来一波必知必会的知识点. 面向对象双下方法 首先,先来聊一聊面向对象中的一些特殊的双下划线方法,比如__call__.__getattr__系列.__get ...
- 工程师如何给女友买包?问问阿里“百事通”
简介: 工作那么忙,怎么给女朋友买包?是翻看包包的详情页,再从商品评论中去找信息吗?为了帮助类似的同学节省时间,阿里工程师们提出快速回答生成模型RAGE.你问它答,这个"百事通"能 ...
- python调用 matlab库_python调用matlab的搜索结果-阿里云开发者社区
2018python技术问答集锦,希望能给喜欢python的同学一些帮助 小编发现问答专区中有很多人在问关于python的问题,小编把这些问题汇总一下,希望能给喜欢python的大家一些启示和帮助 本 ...
- oracle脚本导入mysql数据库_oracle脚本导入mysql数据库
关于 oracle脚本导入mysql数据库的搜索结果 问题 如何将一个mysql 风格的 sql 脚本转换为 oracle 导入的 sql 脚本 - 数据库报错 如何将一个 mysql 风格的 sql ...
最新文章
- Linux目录是否是否为空,在Linux上使用C检查目录是否为空
- Service Mesh — Overview
- linux命令vgdisplay提示权限不足,linux常用命令总结
- 备考一天速通计算机三级网络技术
- ASP.NET Core on K8s学习之旅(14)Ingress灰度发布
- 15必须阅读Java 8教程
- java监听com口_简单了解Java接口+事件监听机制
- link 和 style 元素在 HTML 文档中的位置
- ssh全屏退出的办法
- XCL-Charts圈图
- Micropython TurnipBit 旋转按钮控制直流电机转速(儿时记忆中的吊扇)
- 学数值计算可以从事计算机算法吗,数值计算方法
- 教你七招记单词快又准
- 如何一键录制4k8k高清视频?
- 鼓捣中兴的TCM SSX44B
- 从人工智能角度考虑生命的本质和意义
- 与ChatGPT合作解析《三体》数学
- mysql索引linke和等于_10分钟让你明白MySQL是如何利用索引的
- 微信公众号代运营 2022年企业有必要运营公众号吗
- 嵌入式linux矩阵键盘,基于嵌入式Linux的矩阵键盘驱动程序开发
热门文章
- 第二百四十六节,Bootstrap弹出框和警告框插件
- [中文版] 可视化 CSS References 文档
- [转]svn常用命令
- 辉光UIView的category
- CentOS thrift python demo
- android 学习查阅笔记
- ASP.NET GridView控件匯出EXCEL-移除控件,只是顯示文本
- ADO.NET Entity Framework学习笔记(2)建模[转]
- zune linux_更新您的Zune Player软件
- 如何添加引文标_如何在Google文档中查找和添加引文