找不到如何使用HttpContent


184

我正在尝试使用HttpContent

HttpContent myContent = HttpContent.Create(SOME_JSON);

...但是我找不到在定义该DLL的地方碰运气。

首先,我尝试添加对Microsoft.Http以及的引用System.Net,但两者均不在列表中。我也尝试添加对的引用,System.Net.HttpHttpContent该类不可用。

那么,谁能告诉我在哪里可以找到HttpContent课程?

Answers:


-7

该类被列为System.Net.Http程序集中存在的类。请注意,该类是.NET 4.5的新增功能,因此您需要使用该版本的BCL。


2
它也可以通过NuGet的Microsoft.NET.Http包用于.NET 4
Panagiotis Kanavos,2012年

121
讨厌挑剔但遇到问题,这不是竞争的答案吗?确保System.Net.Http包含HttpContent。但是HttpContent不具备Create方法。您需要使用派生类之一(pfelix.wordpress.com/2012/01/16/…),例如StringContent。例如,新的StringContent(SOME_JSON)
英尺

13
@ 6footunder一点都不挑剔,这个答案是不正确的。
阿兰·穆赫兰

您可以在下面看到Youngjae的答案作为一个适当的例子:stackoverflow.com/a/24474664/21539
Zain Rizvi 2015年

8
这个答案确实解决了OP 原始问题的意图,根据我的仔细阅读,它询问在哪里HttpContent可以找到该类。(还请注意,OP接受了这个答案。)碰巧的是,OP遇到了第二个问题(试图构造的实例HttpClient),直到解决了DLL引用问题之后,该问题才可能对OP并不明显。这里的一些答案解决了第二个问题,许多人发现这些答案很有用。最后,我已经编辑了该问题(基于OP的原始文本)以进行澄清。
DavidRR

373

只是使用...

var stringContent = new StringContent(jObject.ToString());
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);

要么,

var stringContent = new StringContent(JsonConvert.SerializeObject(model), Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);

说内容参数需要是IHttpContent而不是StringContent。但是,当我将其投射到界面上时,它很高兴。
micahhoover

3
最终使用HttpStringContent。我无法使用StringContent类,因为PostAsync(或者我的情况下为PutAsync)即使将其转换为IHttpContent对象也不会接受StringContent。
micahhoover 2015年

4
StringContent可与PostAsync配合使用,但是如果您需要或需要使用HttpContent,则可以这样做:HttpContent content = new StringContent(jsonString);
克里斯·科斯特

我一直看到似乎与我的问题类似的答案,但是当我通过两个API进行调试时,都会触发一个PostAsync(“ path”,StringContent),但是当它碰到另一个API时我不会有一个可以解析和使用的主体,返回时我得到500 ...我很茫然,因为我似乎是在这样做。唯一的不同是,我没有序列化该对象,因为在第一个API中收到该对象时,该对象已经被序列化了,这是一个简单的传递。
Slagmoth

这应该是答案:/
DanielV

147

接受6footunder的注释并将其转换为答案HttpContent是抽象的,因此您需要使用派生类之一:

在此处输入图片说明


5
看起来他使用了Visual Studio的“类图”功能(右键单击您的项目,添加项,类图。然后,您可以转到解决方案资源管理器并展开“引用”来获取您引用的库的图。)docs.microsoft.com/en -us / visualstudio / ide /…
Arin

77

对于JSON Post:

var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);

非JSON:

var stringContent = new FormUrlEncodedContent(new[]
{
    new KeyValuePair<string, string>("field1", "value1"),
    new KeyValuePair<string, string>("field2", "value2"),
});
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);

https://blog.pedrofelix.org/2012/01/16/the-new-system-net-http-classes-message-content/


我正在尝试使用您的“ non-json”示例,我应该如何在接收端读取数据?

var contents =等待响应。Content.ReadAsStringAsync();
菲利佩·德维萨


0

我很确定代码没有使用System.Net.Http.HttpContent类,而是使用Microsoft.Http.HttpContent。Microsoft.Http是WCF REST入门工具包,在放置到.NET Framework中之前从未发布过预览版。您仍然可以在这里找到它:http : //aspnet.codeplex.com/releases/view/24644

我不建议在此基础上添加新代码。


0

System.Net.Http命名空间(如HttpContent类所在)是一个新的.NET 4.5,你使用VS2012 RC?

否则,您将无权访问。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.