StringContent 与 ObjectContent

StringContent vs ObjectContent

我正在使用 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 因为几乎所有发送的内容都是 "string".

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

I was wondering what difference it makes if this was a StringContent rather than an ObjectContent like this?

在您的示例中不会有任何区别。 ObjectContent 仅允许通过 HttpClient 发送 "wider" 范围的类型,而 StringContent 仅针对 string 值,例如 JSON .

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

编辑:

考虑到您发布的是 JSON,您甚至可以使用 HttpClientExtensions.PostAsJsonAsync<T>:

使其不那么冗长
await httpClient.PostAsJsonAsync(url, json);

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

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

"do the job" 在 .NET Core 中也很完美。

编辑:

此外,如果您想添加自己的 header,您可以输入:

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