找不到如何使用 HttpContent

Posted

技术标签:

【中文标题】找不到如何使用 HttpContent【英文标题】:Can't find how to use HttpContent 【发布时间】:2012-06-24 02:16:18 【问题描述】:

我正在尝试使用HttpContent:

HttpContent myContent = HttpContent.Create(SOME_JSON);

...但是我没有找到定义它的 DLL。

首先,我尝试添加对Microsoft.HttpSystem.Net 的引用,但列表中都没有。我还尝试添加对System.Net.Http 的引用,但HttpContent 类不可用。

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

【问题讨论】:

【参考方案1】:

只需使用...

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。不过,当我将它投射到界面时,它很高兴。 最终使用了 HttpStringContent。我无法使用 StringContent 类,因为 PostAsync(或在我的情况下为 PutAsync)不接受 StringContent,即使您将其强制转换为 IHttpContent 对象。 StringContent 对我来说与 PostAsync 一起工作,但如果你想或需要使用 HttpContent,你可以这样做:HttpContent content = new StringContent(jsonString); 我一直看到这个答案似乎与我的问题相似,但是当我通过我的两个 API 进行调试时,我得到一个 PostAsync("path", StringContent) 触发但是当它击中其他 API,我没有要解析和使用的主体,返回时我得到 500 ......我很茫然,因为看起来我正在这样做。唯一的区别是我没有序列化对象,因为当我在第一个 API 中收到它时它已经序列化了,而且它是一个简单的传递。 这应该是答案:/【参考方案2】:

要将 6footunder 的评论转化为答案,HttpContent 是抽象的,因此您需要使用其中一个派生类:

【讨论】:

看起来他使用了 Visual Studio 的“类图”功能(右键单击您的项目,添加项目,类图。然后您可以通过解决方案资源管理器并展开参考以获取您引用的库的图表。 ) docs.microsoft.com/en-us/visualstudio/ide/… @Chris,请解释一下你是如何为 HttpContent 生成这个类图的...【参考方案3】:

对于 JSON 帖子:

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/

【讨论】:

我正在尝试使用您的“非json”示例,我应该如何读取接收端的数据? var 内容 = 等待 response.Content.ReadAsStringAsync();【参考方案4】:

虽然 HttpContent 的最终版本和整个 System.Net.Http 命名空间将随 .NET 4.5 一起提供,但您可以通过从 NuGet 添加 Microsoft.Net.Http 包来使用 .NET 4 版本

【讨论】:

【参考方案5】:

我很确定代码没有使用 System.Net.Http.HttpContent 类,而是使用 Microsoft.Http.HttpContent。 Microsoft.Http 是 WCF REST Starter Kit,在放入 .NET Framework 之前从未进行过预览。 你仍然可以在这里找到它:http://aspnet.codeplex.com/releases/view/24644

我不建议在此基础上编写新代码。

【讨论】:

【参考方案6】:

在此处使用Microsoft.AspNet.WebApi.Client 即可。

例子:

var client = HttpClientFactory.Create();
var result = await client.PostAsync<ExampleClass>("http://www.sample.com/write", new ExampleClass(), new JsonMediaTypeFormatter());

【讨论】:

以上是关于找不到如何使用 HttpContent的主要内容,如果未能解决你的问题,请参考以下文章

使用 HttpClient 时如何在 HttpContent 中设置大字符串?

C#.NET Web API 2,如何使用 HTTPGET 异步方法上的 HttpContent 从网站中提取特定文本?

将 HttpContent 转换为 byte[]

如何从 HttpContent 检索 JSON 数据

如何修复找不到 Getter:'nuutil'

我找不到如何在我的 xamarin 项目中使用 json 格式