咨询区

  • 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 工具包相关推荐

  1. NET问答: JS 中有 LINQ SelectMany 方法的等价实现吗?

    咨询区 toddmo: 很遗憾,我在 Underscore 和 Jquery 中都没有找到对等实现,我的要求很简单,只要能做到 IE9 兼容即可. 我的 SelectMany 实现如下: // Sel ...

  2. 知识图谱问答的实践技术分享的书面版本

    公众号 系统之神与我同在 编者按:随着互联网软硬件相关技术的飞速发展,人们逐渐从信息时代进入智能时代.知识图谱作为承载底层海量知识并支持上层智能应用的重要载体,在智能时代中扮演了极其重要的角色.而利用 ...

  3. 如何用Octave工具包

    如何用Octave工具包 如何在Octave中安装工具包(类似matlab中的工具箱),Octave中有专门的工具包分享站点: Octave工具包站点:https://octave.sourcefor ...

  4. 全网首译 : 初学者终极指南—掌握Scrum敏捷框架—第1章

    原书信息如下 Name: The Ultimate Beginner's Guide To Learn And Master Scrum Agile Framework Author: HEIN SM ...

  5. Flask的上下文管理机制

    前引 在了解flask上下文管理机制之前,先来一波必知必会的知识点. 面向对象双下方法 首先,先来聊一聊面向对象中的一些特殊的双下划线方法,比如__call__.__getattr__系列.__get ...

  6. flask 上下文管理

    前引 在了解flask上下文管理机制之前,先来一波必知必会的知识点. 面向对象双下方法 首先,先来聊一聊面向对象中的一些特殊的双下划线方法,比如__call__.__getattr__系列.__get ...

  7. 工程师如何给女友买包?问问阿里“百事通”

    简介: 工作那么忙,怎么给女朋友买包?是翻看包包的详情页,再从商品评论中去找信息吗?为了帮助类似的同学节省时间,阿里工程师们提出快速回答生成模型RAGE.你问它答,这个"百事通"能 ...

  8. python调用 matlab库_python调用matlab的搜索结果-阿里云开发者社区

    2018python技术问答集锦,希望能给喜欢python的同学一些帮助 小编发现问答专区中有很多人在问关于python的问题,小编把这些问题汇总一下,希望能给喜欢python的大家一些启示和帮助 本 ...

  9. oracle脚本导入mysql数据库_oracle脚本导入mysql数据库

    关于 oracle脚本导入mysql数据库的搜索结果 问题 如何将一个mysql 风格的 sql 脚本转换为 oracle 导入的 sql 脚本 - 数据库报错 如何将一个 mysql 风格的 sql ...

最新文章

  1. Linux目录是否是否为空,在Linux上使用C检查目录是否为空
  2. Service Mesh — Overview
  3. linux命令vgdisplay提示权限不足,linux常用命令总结
  4. 备考一天速通计算机三级网络技术
  5. ASP.NET Core on K8s学习之旅(14)Ingress灰度发布
  6. 15必须阅读Java 8教程
  7. java监听com口_简单了解Java接口+事件监听机制
  8. link 和 style 元素在 HTML 文档中的位置
  9. ssh全屏退出的办法
  10. XCL-Charts圈图
  11. Micropython TurnipBit 旋转按钮控制直流电机转速(儿时记忆中的吊扇)
  12. 学数值计算可以从事计算机算法吗,数值计算方法
  13. 教你七招记单词快又准
  14. 如何一键录制4k8k高清视频?
  15. 鼓捣中兴的TCM SSX44B
  16. 从人工智能角度考虑生命的本质和意义
  17. 与ChatGPT合作解析《三体》数学
  18. mysql索引linke和等于_10分钟让你明白MySQL是如何利用索引的
  19. 微信公众号代运营 2022年企业有必要运营公众号吗
  20. 嵌入式linux矩阵键盘,基于嵌入式Linux的矩阵键盘驱动程序开发

热门文章

  1. 第二百四十六节,Bootstrap弹出框和警告框插件
  2. [中文版] 可视化 CSS References 文档
  3. [转]svn常用命令
  4. 辉光UIView的category
  5. CentOS thrift python demo
  6. android 学习查阅笔记
  7. ASP.NET GridView控件匯出EXCEL-移除控件,只是顯示文本
  8. ADO.NET Entity Framework学习笔记(2)建模[转]
  9. zune linux_更新您的Zune Player软件
  10. 如何添加引文标_如何在Google文档中查找和添加引文