令我惊讶的是,在.NET BCL中,我不能做任何像这样简单的事情:
byte[] response = Http.Post
(
url: "http://dork.com/service",
contentType: "application/x-www-form-urlencoded",
contentLength: 32,
content: "home=Cosby&favorite+flavor=flies"
);
字符串
上面假设的代码使用数据进行HTTP POST,并从静态类Http
上的Post
方法返回响应。
既然我们没有这么简单的东西,下一个最好的解决方案是什么?
如何发送一个包含数据的HTTP POST并获取响应的内容?
9条答案
按热度按时间qmb5sa221#
字符串
您将需要这些包括:
型
如果你坚持使用静态方法/类:
型
然后简单地:
型
oalqel3c2#
使用HttpClient:就Windows 8应用程序开发而言,我遇到了这个问题。
字符串
eanckbw93#
使用WebRequest。从Scott Hanselman:
字符串
hjqgdpho4#
字符串
0kjbasz65#
就我个人而言,我认为最简单的方法来做一个http帖子,并获得响应是使用WebClient类。这个类很好地抽象了细节。在MSDN文档中甚至有一个完整的代码示例。
http://msdn.microsoft.com/en-us/library/system.net.webclient(VS.80).aspx
在您的例子中,您需要的是EscheradData()方法(同样,文档中包含了代码示例)
http://msdn.microsoft.com/en-us/library/tdbbwh0a(VS.80).aspx的
mixadString()可能也可以工作,它将其抽象到另一个级别。
http://msdn.microsoft.com/en-us/library/system.net.webclient.uploadstring(VS.80).aspx的
rkkpypqq6#
考虑到其他答案都是几年前的,目前我的想法可能会有所帮助:
最简单的方法
字符串
更实际的例子
通常我们处理的是已知类型和JSON,所以你可以用任意数量的实现来进一步扩展这个想法,比如:
型
举个例子,这可以被称为:
型
xesrikrc7#
我知道这是一个古老的故事,但希望它能帮助一些人。
字符串
xxb16uws8#
你可以使用类似这样的伪代码:
字符串
du7egjpx9#
下面是一个.net 7的例子:
请注意,httpClient.PostAsJsonAsync是一个扩展方法。这意味着您必须将System.Net.Http.Json添加到项目中,然后使用它
using System.Text.Json;
,否则您将获得编译错误。还要注意的是,这个例子为每个请求示例化一个httpClient。不推荐这样做。这种做法会强制每个调用都建立一个新的连接,这需要一个新的https握手。相反,使用一个单例或静态示例。有关如何正确实现这一点的完整细节,请参阅文档,或者在这里观看我的视频:https://youtu.be/BA1e_ez8fwI?si=Tt0ppiIxoVOX57mA
字符串