StringContent vs ObjectContent

时间:2015-06-08 08:40:23

标签: c# json serialization httpclient dotnet-httpclient

我正在使用System.Net.Http的HttpClient通过" POST"来调用REST API。 使用以下代码:

using (HttpRequestMessage requestMessage = new HttpRequestMessage(
                                           HttpMethod.Post, new Uri(request)) { })
{
     response = await httpClient.PostAsync(request, objectContent);
}

" objectContent"目前是这个 -

objectContent = new ObjectContent(jsonContent.GetType(),
                                  jsonContent,
                                  new JsonMediaTypeFormatter());

我想知道如果这是一个StringContent而不是像这样的ObjectContent会有什么不同?

objectContent = new StringContent(content);
objectContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");

两者都很好。因为它是JSON,我倾向于认为StringContent是有意义的。但是什么时候使用ObjectContent,因为几乎所有发送的内容都是"字符串"。

3 个答案:

答案 0 :(得分:12)

  

我想知道如果这是一个StringContent会有什么不同   而不是像这样的ObjectContent?

在你的例子中,没有任何区别。 ObjectContent只允许通过HttpClient发送“更广泛”的类型,而StringContent仅对string值更窄,例如JSON。

StringContentByteArrayContent周围的纤薄包装器,实际上存储了作为byte[]传递的值。您只需获得不需要来回转换string的好处。

修改

鉴于您发布的是JSON,您甚至可以通过HttpClientExtensions.PostAsJsonAsync<T>使其更简洁:

await httpClient.PostAsJsonAsync(url, json);

答案 1 :(得分:2)

如果有人将搜索如何在.NET Core 2.1中通过PostAsync发送请求: 我没有在HttpClient中找到PostAsJsonAsync方法,但是您的解决方案设置为:

objectContent = new StringContent(content);
objectContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");

在.NET Core中也完美地“完成任务”。

编辑:

另外,如果要添加自己的标题,则可以输入:

objectContent.Headers.Add("Your header", "Value");

答案 2 :(得分:0)

ObjectContent用于使用内置或自定义编写的格式化程序格式化更复杂的Mime类型。也可以将ObjectContent用于一个简单的字符串,除了使用StringContent可以更好的性能(恕我直言和未检查)之外,它没有太大的区别,因为它可能已经专门针对字符串进行了优化