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 .
StringContent
是 ByteArrayContent
的细长包装器,实际上存储作为 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");
我正在使用 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 .
StringContent
是 ByteArrayContent
的细长包装器,实际上存储作为 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");