我正在使用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,因为几乎所有发送的内容都是"字符串"。
答案 0 :(得分:12)
我想知道如果这是一个StringContent会有什么不同 而不是像这样的ObjectContent?
在你的例子中,没有任何区别。 ObjectContent
只允许通过HttpClient
发送“更广泛”的类型,而StringContent
仅对string
值更窄,例如JSON。
StringContent
是ByteArrayContent
周围的纤薄包装器,实际上存储了作为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可以更好的性能(恕我直言和未检查)之外,它没有太大的区别,因为它可能已经专门针对字符串进行了优化