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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303779.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wordpress安装 相关

64 位ubuntu 安装 32位兼容包apt-get install ia32-libs刚看了一下&#xff0c;wordpress才11个表太神奇了&#xff0c;这么复杂的系统&#xff0c;amazing参考以下文章http://9hills.us/2011/01/wordpress/http://dueam.org/2010/09/ubuntu-server-%E5%AE%89%E8%A3%85%E4%B8%8…

分支结构程序案例c语言,C语言学习之三——分支结构程序

运算符优先级&#xff1a;如下所示&#xff1a;image.png关系运算符和表达式关系运算符定义&#xff1a;在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。因此使用关系运算符进行比较(注&#xff1a;比较后的返回值为boolean值&#xff0c;即0或1(真为1&#xf…

老刘在微软Ignite China大会上聊低代码

观点概要1.低代码平台不是新概念&#xff0c;这种概念的上一个类似的提法是“所见即所得”。目前的低代码平台是依靠技术手段&#xff0c;不仅让所见即所得&#xff0c;还可以让一部分“所不见也所得”&#xff0c;比如背后的数据结构&#xff0c;业务逻辑&#xff0c;权限认证…

诺基亚首款Windows Phone智能手机将在年内推出

诺基亚高级官员星期日称&#xff0c;第一款采用微软Windows Phone操作系统的诺基亚智能手机的目标发布日期将在几天之内确定下来。诺基亚的目标是在将这种手机推向市场。诺基亚负责智能设备的执行副总裁乔哈洛&#xff08;Jo Harlow&#xff09;称&#xff0c;诺基亚和微软的技…

c语言四个数找大wxyz,2015年计算机二级《C语言》考试上机测试题(7)

31.有以下程序&#xff1a;#includemain(  ){char a[20]&#xff0c;b[20]&#xff0c;c[20];scanf("%s%s"&#xff0c;a&#xff0c;b);gets(c);printf("%S%S%s\n"&#xff0c;a&#xff0c;b&#xff0c;c);}程序运行时从第一列开始输入&#xff1a;Th…

IOT必备之MQTT结构分析,不进来看看?【后附源码】

全网唯一物联网MQTT协议报文结构分析以及基于C#代码的报文组装实现介绍MQTT是一种基于TCP/IP协议的应用层协议&#xff0c;它规定了不同应用之间进行数据交换时的传送格式。既然是协议&#xff0c;理论上可以被任何开发语言实现它&#xff0c;以运行在任何平台&#xff0c;这个…

要成为年薪五十万的数据分析师,除了技术还需要什么?

超过59%企业&#xff0c;将提高数据分析岗位数量----一流的数据分析师&#xff0c;年薪轻松突破50万想必同学们看到这个数据并不惊讶&#xff0c;如今在中国&#xff0c;各行各业对数据分析岗位的需求日益提高&#xff1a;在线社交媒体&#xff0c;希望通过数据时刻洞察用户关注…

ISAPI_Rewrite伪静态配置

第一:首先我们需要下载一个ISAPI_Rewrite,有精简版和完全版,一般精简版只能对服务器全局进行配置,而完整版可以对服务器上的各个网站进行伪静态配置.对于个人站长来说,精简版就足够了. 下载&#xff1a;http://www.isapirewrite.com/download/isapi_rwl_0055.msi 第二:下载完…

c语言电脑蓝屏代码,电脑蓝屏代码0x0000001a的解决方法

遇到蓝屏&#xff0c;第一时间记录停机码&#xff0c;如有导致蓝屏的文件名&#xff0c;那么排查的范围就会缩小。下面小编就为大家介绍电脑蓝屏代码0x0000001a的解决方法介绍&#xff0c;希望能对大家有所帮助&#xff01;方法/步骤1、先看这张截图的停机码所在位置。STOP后面…

关于序列建模,是时候抛弃RNN和LSTM了

作者表示&#xff1a;我们已经陷入 RNN、LSTM 和它们变体的坑中很多年&#xff0c;是时候抛弃它们了&#xff01;在 2014 年&#xff0c;RNN 和 LSTM 起死回生。我们都读过 Colah 的博客《Understanding LSTM Networks》和 Karpathy 的对 RNN 的颂歌《The Unreasonable Effecti…

如何运用并行编程Parallel提升任务执行效率

本文来自小易&#xff0c;【DoTNET技术圈】公众号已获得转载授权。《.NET并发变成实战》读后感&#xff1a;并行编程Parallel手打目录&#xff1a;一、前言二、任务并行库&#xff08;TPL&#xff09;的介绍三、Parallel.Invoke的使用四、Parallel.For的使用五、Parallel.ForEa…

VMware View 与Citrix XenDesktop对决之用户体验篇

看看真实的VMware View 与Citrix XenDesktop对比。 用户体验作为虚拟桌面成功的关键因素&#xff0c;看看VMware View如何在这方面立于不败之地。 对于测试中暴露的差异&#xff0c;您也许会觉得困惑。其实当您了解完下面这些&#xff0c;就全明白了。 Citrix的XenDesktop使用的…

c语言整数四则运算表达式的输出格式控制,Educoder CC++基本输入输出

第1关&#xff1a;重要的事情说三遍1.这里结合的一个具体场景是&#xff1a;程序接受一个输入字符&#xff0c;然后将该字符输出三遍&#xff0c;再输出一个&#xff01;。// 包含标准输入输出函数库#include // 定义main函数int main(){// 请在此添加‘重要的事情说三遍’的代…

通过 GitHub Actions 自动创建 Github Release

通过 GitHub Actions 自动创建 Github ReleaseIntro在 GitHub 上维护了几个小的开源项目&#xff0c;每次在发布新版本的时候会创建一个 release&#xff0c;这样可以比较方便的找到对应的版本的代码&#xff0c;不需要再人肉的从 git log 中找到指定的 commit&#xff0c;而且…

利用win7的applocker功能来有组织的阻止相关软件运行

我有4年没用360相关的软件了&#xff0c;没有360的弹窗用电脑就是舒服。但是我的电脑有时候会有别人来用&#xff0c;我的同学或者我的父母。但是他们经常会自作主张地在我的电脑上装上360卫士&#xff0c;还有360浏览器。每次都是装了我再删&#xff0c;反反复复也不是办法。后…

人工智能会让工作环境变得更公平,还是更压抑?

人工智改变的不仅仅是工作内容……人工智能&#xff08;AI&#xff09;正在踏足商业领域。正如我们本周的特别报道所诠释到的那样&#xff0c;所有类型的公司都在利用人工智能来预测需求&#xff0c;雇佣员工和对付客户。2017年&#xff0c;企业在与人工智能相关的并购交易中支…

递归C语言排列组合方式,递归解决一种排列组合的方法

问题场景&#xff1a;比如说一件商品有3中属性&#xff0c;每个属性又有3种不同的值&#xff0c;那么此时问&#xff0c;这几种属性可能的组合性&#xff0c;相信你很快就得到结果为"33327"种&#xff0c;此时你可以实现的方式可以为三个for循环嵌套来实现&#xff0…

windows服务autofac注入quartz任务

概述Autofac 是一款超赞的.NET IoC 容器 . 它管理类之间的依赖关系, 从而使 应用在规模及复杂性增长的情况下依然可以轻易地修改 . 它的实现方式是将常规的.net类当做 组件 处理。我们通常在一些情况下需要软件具有一个自动执行某些任务的功能&#xff0c;但是又不希望直接启动…

离开时请告诉自己生意就是生意

离开时请告诉自己生意就是生意 离职或者被离职&#xff0c;是职场中很常见的事情&#xff0c;每天这个星球上不知道要发生多少次&#xff0c;不管你经历过与否、体会到其中的滋味与否&#xff0c;他都会一直存在着&#xff01;当这一切发生时&#xff0c;不管你是获利者还是受害…

如何假装成一名好程序员?

最近我对一位资深程序员就工作生活问题进行了深度采访&#xff0c;采访内容如下&#xff1a;Q&#xff1a;请问你工作多久了&#xff1f;A&#xff1a;5年了Q&#xff1a;你觉得&#xff0c;程序员这份工作对你有什么影响吗&#xff1f;A&#xff1a;有Q&#xff1a;那你的生活…