我正在使用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,因为几乎所有发送的内容都是“字符串”。

最佳答案



在您的示例中,没有任何区别。 ObjectContent仅允许通过HttpClient发送“更广泛”的类型范围,而StringContent仅对于string值(例如JSON)更窄。
StringContentByteArrayContent的瘦包装,实际上存储了作为byte[]传递的值。您只需获得不需要来回转换string的好处。

编辑:

考虑到您发布的是JSON,您甚至可以通过使用 HttpClientExtensions.PostAsJsonAsync<T> 使其变得不那么冗长:

await httpClient.PostAsJsonAsync(url, json);

10-08 02:02