StringContent против ObjectContent
Я использую систему.Сеть.HttpClient Http для вызова REST API с помощью " POST" используя следующий код:
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 ответов
мне было интересно, какая разница, если это был StringContent а не ObjectContent такой?
в вашем примере не будет никакой разницы. ObjectContent просто позволяет" более широкий " диапазон типов для отправки через HttpClient, а StringContent меньше на string только значения, такие как JSON.
StringContent - Это тонкая обертка вокруг ByteArrayContent, и фактически сохраняет значение передается как byte[]. Вы просто получаете преимущество не необходимо преобразовать ваш string и обратно.
Edit:
учитывая тот факт, что вы публикуете JSON, вы даже можете сделать его менее подробным, используя HttpClientExtensions.PostAsJsonAsync<T>:
await httpClient.PostAsJsonAsync(url, json);
Если кто-то будет искать, как отправить запрос PostAsync в .NET Core 2.1: Я не нашел метод PostAsJsonAsync в HttpClient, но ваше решение с настройкой:
objectContent = new StringContent(content);
objectContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
" сделать работу " отлично также в .NET Core.
Edit:
кроме того, если вы хотите добавить свой собственный заголовок, вы можете ввести:
objectContent.Headers.Add("Your header", "Value");
ObjectContent используется для форматирования более сложных типов Mime с помощью встроенных или пользовательских форматеров. Можно также использовать ObjectContent для простой строки, это не имеет большого значения, за исключением производительности, которая (IMHO и не проверена) может быть лучше с StringContent, так как она может быть оптимизирована специально для строк